2

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

“仅关于一个命名空间”是指如果我有这样的文档:

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

我希望<asdf>,</asdf>被视为文本。

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

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

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

4

2 回答 2

3

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

于 2012-08-29T21:42:00.567 回答
0

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

所以:<boy socks="black" ></boy> 可能会以 <boy socks='black'/> 的形式返回

如果您想将输入视为不是 XML,您将不得不求助于非 XML 工具,或者完全重新考虑您的情况,因为这是一件非常不寻常的事情。

如果您小心的话,使用 Perl 这样的文本处理语言是相当容易的。例如,

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

通过将要视为文本的 < 符号更改为 < 将有很长的路要走 反而。如果您在 Perl 中读取整个文件而不是(如本例中)一次读取一行,那么这种方法实际上效果最好,这样您就可以匹配分布在多行上的关闭标签,

</boy
> like this.

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

于 2012-08-30T02:38:46.973 回答