XML的操作

szjarvis 2016-05-09 01:59:02
XML文件部份结构:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<fjs1:invokeSrvResponse xmlns:fjs1="http://www.digiwin.com.cn/tiptop/TIPTOPServiceGateWay">
<response><![CDATA[<response>
<srvver>1.0</srvver>
<srvcode>000</srvcode>
<payload>
<param key="data" type="XML">
<![CDATA[
<Response>
<Execution>
<Status code="0" sqlcode="0" description=""/>
</Execution>
<ResponseContent>
<Parameter/>
<Document>
<RecordSet id="1">
<Master name="M1" node_id="1">
<Record>
......


XmlDocument doc = new XmlDocument();
doc.Load("d:\\test.txt"); //手工测试

XmlCDataSection CdataSection = (XmlCDataSection)(doc.SelectSingleNode("/SOAP-ENV:Envelope/SOAP-ENV:Body/fjs1:invokeSrvResponse/response").FirstChild); //执行此句出错
string sResponseXML = CdataSection.Value;


XML节点SOAP-ENV:Envelope是什么意思,没见过带冒号的节点名称,如何实现我想要的结果,我要取CDATA的内容。
谢谢。
...全文
141 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
it3nod 2016-05-12
  • 打赏
  • 举报
回复
遇到同样的问题,帮顶。
szjarvis 2016-05-11
  • 打赏
  • 举报
回复
有人弄过这个CDATA嵌套吗?
szjarvis 2016-05-09
  • 打赏
  • 举报
回复

            XmlDocument doc = new XmlDocument();
            //doc.LoadXml(sResponseXML);
            doc.Load("d:\\test.txt");   //手工测试

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(new XmlDocument().NameTable);
            nsmgr.AddNamespace("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/");
            nsmgr.AddNamespace("fjs1", "http://www.digiwin.com.cn/tiptop/TIPTOPServiceGateWay");

            XmlCDataSection CdataSection = (XmlCDataSection)(doc.SelectSingleNode("/SOAP-ENV:Envelope/SOAP-ENV:Body/fjs1:invokeSrvResponse/response", nsmgr).FirstChild);
            sResponseXML = CdataSection.Value;
            doc.LoadXml(sResponseXML);

            XmlCDataSection CdataSection2 = (XmlCDataSection)doc.SelectSingleNode("/response/payload/param").FirstChild;
            sResponseXML = CdataSection2.Value;
            doc.LoadXml(sResponseXML);

            XmlNode mNode = doc.SelectSingleNode("/Response/ResponseContent/Document/RecordSet/Master/Record");
            XmlNodeList mainTab = mNode.ChildNodes;     //主表节点集合
C# 代码如上,我的目的应该很清楚,就是要获取最里层CDATA中的内容,然后再处理里面的数据。
szjarvis 2016-05-09
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
那个是namespace http://www.cnblogs.com/secying/archive/2011/11/22/2258403.html
参考你发的确实可以了,但又遇到个问题。 我的XML中是有两个CDATA嵌套的,照上面的文章我取最外层CDATA内容时却是在内层的CDATA结束的,少了后面的代码,下面是部份XML: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <fjs1:invokeSrvResponse xmlns:fjs1="http://www.digiwin.com.cn/tiptop/TIPTOPServiceGateWay"> <response><![CDATA[<response> <srvver>1.0</srvver> <srvcode>000</srvcode> <payload> <param key="data" type="XML"> <![CDATA[ <Response> <Execution> <Status code="0" sqlcode="0" description=""/> </Execution> <ResponseContent> <Parameter/> <Document> <RecordSet id="1"> <Master name="M1" node_id="1"> <Record> <Field name="pmdient" value="1.0"/> <Field name="pmdisite" value="SITE-01"/> <Field name="pmdidocno" value="E161-0002"/> <Field name="pmdidocdt" value="2014-08-08"/> <Field name="pmdi001" value="N"/> <Field name="pmdi004" value="DS001"/> <Field name="pmdi005" value="USD"/> <Field name="pmdi006" value="VAT200"/> <Field name="pmdi034" value=""/> <Detail name="d1_1" node_id="1_1"> ....... 此处省略循环<Record></Record> </Detail> </Record> </Master> </RecordSet> </Document> </ResponseContent> </Response> ]]]]>><![CDATA[ </param> </payload> </response>]]></response> </fjs1:invokeSrvResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 这个XML是神话数码ERP返回的内容,按理说应该不会有问题,只是我在取CDATA时,感觉它只会找第一个配置的结束符,就把后面的给忽略了。如何解决? 别外: ]]]]>><![CDATA[ </param> </payload> </response>]]></response> 这一段怎么理解,跟上面好像不能完全对应起来。
孙大诚_SunRobin 2016-05-09
  • 打赏
  • 举报
回复
命名空间,你这个xml应该是根据一定的格式,那个格式就是schema,schema里边规定了命名空间。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧