仅针对一个命名空间解析XML

时间:2012-08-29 21:33:52

标签: c# xml xml-parsing

我需要解析只有一个命名空间的XML文件。

“只关注一个名称空间”我的意思是,如果我有这样的文件:

<xc:document xmlns:xc="asdasd">
  <asdf>
    <xc:abcd />
  </asdf>
</xc:document>

我希望将<asdf></asdf>视为文字。

本文档的结构应如下所示:

document
|
|- text (<asdf>)
|- abcd
|- text (</asdf>)

实现这一目标的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

首先使用xslt转换文档,以便您希望视为文本的节点实际上是文本。

答案 1 :(得分:0)

几乎任何XML解析器都会失去区别,例如是使用了单引号还是双引号,还是使用了CDATA部分,还是使用了标签内的空格(而不是标签之间)。

所以:     &lt; boy socks =“black”     &GT;&LT; /男孩&GT; 可能会回来作为&lt; boy socks ='black'/&gt;

如果您希望将输入视为非XML,则必须依靠非XML工具,完全重新考虑您的情况,因为这是一个非常不寻常的事情。做。

如果你小心的话,在文本处理语言如Perl中相当容易。例如,

perl -p -e 's#<(/?[^:]+[\s>])#\&lt;$1#g'
通过改变&lt;

将会有很长的路要走。你希望将文字视为&amp; lt;代替。如果您在Perl中读取整个文件而不是(在此示例中)一次读取一行,这种方法实际上效果最佳,这样您就可以匹配分布在多行中的关闭标记,

</boy
> like this.

但是,最好用XML解析器而不是正则表达式来解析XML,所以如果我上面提到的那种更改都没问题,那么在XSLT中这很容易做到。