首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML DocumentElement正在回收innerXml

XML DocumentElement正在回收innerXml
EN

Stack Overflow用户
提问于 2011-03-02 03:01:20
回答 2查看 860关注 0票数 0

我有一个简单的XML文件,如下所示,当通过一个基本的XmlDocument.Load(filename.xml)读入它时。如果我加载这个文件,并检查它的innerXML,它看起来一切正常。然而,当我检查DocumentElement的值时,它是一团糟!我将示例保持较小,这样您就可以很容易地看到没有错误的形式:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<fax:FaxService xmlns:fax="http://www.hp.com/schemas/imaging/con/service/fax/2009/02/11/" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">
  <fax:ServiceDefaults>
    <fax:ServiceSendDefaults>
      <fax:InternetFaxSettings>
        <dd:FaxFileFormat>MTIFFG4</dd:FaxFileFormat>
        <dd:UseEmailAsFaxAcctAddr>false</dd:UseEmailAsFaxAcctAddr>
        <dd:AutoCompleteToNANP>false</dd:AutoCompleteToNANP>
        <dd:RetryInterval>0</dd:RetryInterval>
        <dd:MaxRetryAttempts>0</dd:MaxRetryAttempts>
      </fax:InternetFaxSettings>
    </fax:ServiceSendDefaults>
  </fax:ServiceDefaults>
</fax:FaxService>

现在,用下面的简单代码在C#中尝试一下:

..。

代码语言:javascript
复制
XmlDocument xDoc = new XmlDocument();
xDoc.Load("*XMLSAMPLE.XML*");

textBox1.Text = xDoc.InnerXml;
textBox2.Text = xDoc.DocumentElement.InnerXml;

..。

它完全是乱七八糟的,第二个命名空间与每个dd标签重复,甚至没有包含在最顶层的标签中。

我做错了什么?这快把我逼疯了!

EN

回答 2

Stack Overflow用户

发布于 2011-03-02 04:03:56

xDoc.DocumentElement.InnerXml返回的内容在语义上与原始的ServiceDefaults标记相同-如果第一个片段符合您的XML schema,那么InnerXml片段也将符合内部元素的定义。仅仅因为框架重新排列了名称空间声明并不会改变文档的语义。

两个XmlDocument属性的Compare the output

xDoc.DocumentElement

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
   <fax:FaxService xmlns:fax="http://www.hp.com/schemas/imaging/con/service/fax/2009/02/11/" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">
    <fax:ServiceDefaults>
     <fax:ServiceSendDefaults>
      <fax:InternetFaxSettings>
        <dd:FaxFileFormat>MTIFFG4</dd:FaxFileFormat>
        <dd:UseEmailAsFaxAcctAddr>false</dd:UseEmailAsFaxAcctAddr>
        <dd:AutoCompleteToNANP>false</dd:AutoCompleteToNANP>
        <dd:RetryInterval>0</dd:RetryInterval>
        <dd:MaxRetryAttempts>0</dd:MaxRetryAttempts>
      </fax:InternetFaxSettings>
     </fax:ServiceSendDefaults>
    </fax:ServiceDefaults>
  </fax:FaxService>

xDoc.DocumentElement.InnerXml

代码语言:javascript
复制
<fax:ServiceDefaults xmlns:fax="http://www.hp.com/schemas/imaging/con/service/fax/2009/02/11/">
  <fax:ServiceSendDefaults>
   <fax:InternetFaxSettings>
     <dd:FaxFileFormat xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">MTIFFG4</dd:FaxFileFormat>
     <dd:UseEmailAsFaxAcctAddr xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">false</dd:UseEmailAsFaxAcctAddr>
     <dd:AutoCompleteToNANP xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">false</dd:AutoCompleteToNANP>
     <dd:RetryInterval xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">0</dd:RetryInterval>
     <dd:MaxRetryAttempts xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">0</dd:MaxRetryAttempts>
   </fax:InternetFaxSettings>
  </fax:ServiceSendDefaults>
 </fax:ServiceDefaults>
票数 1
EN

Stack Overflow用户

发布于 2011-03-02 04:23:24

在MSDN中查看以下链接将有助于了解您的情况:

http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.innerxml.aspx

基本上,xDoc.DocumentElement.InnerXml查看的是<fax:ServiceDefaults>节点,而xDoc.InnerXml查看的是更高级别的节点(FaxService节点)。这对于理解您的问题至关重要-因为您的所有xmlns都在FaxService节点上。

对XML文档进行以下更改,并注意发生了什么(基本上,将xmlns信息复制到ServiceDefaults节点:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<fax:FaxService xmlns:fax="http://www.hp.com/schemas/imaging/con/service/fax/2009/02/11/" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">
  <fax:ServiceDefaults xmlns:fax="http://www.hp.com/schemas/imaging/con/service/fax/2009/02/11/" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">
    <fax:ServiceSendDefaults>
      <fax:InternetFaxSettings>
        <dd:FaxFileFormat>MTIFFG4</dd:FaxFileFormat>
        <dd:UseEmailAsFaxAcctAddr>false</dd:UseEmailAsFaxAcctAddr>
        <dd:AutoCompleteToNANP>false</dd:AutoCompleteToNANP>
        <dd:RetryInterval>0</dd:RetryInterval>
        <dd:MaxRetryAttempts>0</dd:MaxRetryAttempts>
      </fax:InternetFaxSettings>
    </fax:ServiceSendDefaults>
  </fax:ServiceDefaults>
</fax:FaxService>

突然之间,你的代码就会按照你的期望运行。所以希望这能帮助你理解这个问题。永久的解决方案应该是什么,这取决于你。

哈!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5159058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档