我需要解析只有一个命名空间的XML文件。
“只关注一个名称空间”我的意思是,如果我有这样的文件:
<xc:document xmlns:xc="asdasd">
<asdf>
<xc:abcd />
</asdf>
</xc:document>
我希望将<asdf>
,</asdf>
视为文字。
本文档的结构应如下所示:
document
|
|- text (<asdf>)
|- abcd
|- text (</asdf>)
实现这一目标的最简单方法是什么?
答案 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>])#\<$1#g'
通过改变&lt; 将会有很长的路要走。你希望将文字视为&amp; lt;代替。如果您在Perl中读取整个文件而不是(在此示例中)一次读取一行,这种方法实际上效果最佳,这样您就可以匹配分布在多行中的关闭标记,
</boy
> like this.
但是,最好用XML解析器而不是正则表达式来解析XML,所以如果我上面提到的那种更改都没问题,那么在XSLT中这很容易做到。