【问题标题】:Child Element of XML Element is "\n " when there is a space in the XML Document?XML 文档中有空格时,XML 元素的子元素为“\n”?
【发布时间】:2012-05-23 05:50:06
【问题描述】:

我有以下 XML:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <MessageRequest></MessageRequest>
</SOAP-ENV:Envelope>

我正在像这样访问子元素的名称:

childNode(SOAP-ENV:Body").ChildNodes(0).Name,但是如果元素之间有空格,则子节点名称返回"\n ",但是如果我删除空格,我会得到正确的子节点,例如,如果&lt;SOAP-ENV:Body&gt; 之间有空格和&lt;MessageRequest&gt;,第一个孩子会返回"\n ",但是如果没有空格,就会返回&lt;MessageRequest&gt;

【问题讨论】:

  • `body 的子节点是 .` ?一个点?
  • 不,消息很长,所以我一开始就把它剪掉了。我编辑了它。

标签: xml vb.net soap


【解决方案1】:

您没有提及您使用的语言,而是基于your profilename of the ChildNodes property 以及使用圆括号而不是方括号进行索引,我认为是 VB.NET?

如果您使用的是preserves white space 的文档,则可能会发生这种情况。 DOM 解析器在节点级别工作。 XML 的每个组件都是一个节点。您可以有一个文本节点、一个 CDATA 节点、一个元素节点等。这些将被ChildNodes 属性拾取,并且子节点的数量会有所不同。

检查the node types您正在使用的节点。

如果您有缩进元素,那么该缩进(空格、换行等)将成为第一个子元素。删除格式,第一个子元素应该是元素子元素。

【讨论】:

  • 原来是这样。如果我不必移动缩进等,有没有办法解决这个问题?谢谢。
  • 我为 XmlReaderSettings 尝试了 PreserveWhiteSpace = False 和 IgnoreWhiteSpace = True,但还是不行。
  • @Xaisoft:当使用 DOM 解析器时,正如我所说,它适用于节点,最好的办法是根据节点类型执行操作。您验证节点类型(例如元素),如果它是预期类型,则执行某些操作,否则执行其他操作或将其全部忽略。使用 Web 服务框架可以让您免于进行类似的低级 XML 操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多