【发布时间】:2010-09-20 14:23:51
【问题描述】:
免责声明:以下是针对 XML 的犯罪。这就是为什么我试图用 XSLT 来改变它:)
我的 XML 当前如下所示:
<root>
<object name="blarg" property1="shablarg" property2="werg".../>
<object name="yetanotherobject" .../>
</root>
是的,我将所有文本数据放入属性中。我希望 XSLT 可以拯救我;我想朝着这样的方向前进:
<root>
<object>
<name>blarg</name>
<property1>shablarg</name>
...
</object>
<object>
...
</object>
</root>
到目前为止,我实际上已经完成了所有这些工作,除了我对 XML 的罪过更加……特别。一些标签看起来像这样:
<object description = "This is the first line
This is the third line. That second line full of whitespace is meaningful"/>
我在 linux 下使用 xsltproc,但它似乎没有任何选项来保留空格。我尝试使用 xsl:preserve-space 和 xml:space="preserve" 无济于事。我发现的每个选项似乎都适用于在元素本身内保留空格,但不适用于属性。每次,以上内容都会更改为:
这是第一行 这是第三行。充满空格的第二行是有意义的所以问题是,我可以保留属性空白吗?
【问题讨论】:
-
您应该将空格替换为属性值内部的实体引用,例如将
<object description="first line\nnext line"/>替换为<object description="first line&#xA;next line"/>。属性值规范化(3.3.3)然后取决于我认为默认为CDATA的属性类型。但是我认为你可以用<!DOCTYPE root [ <!ATTLIST object description CDATA #IMPLIED>'>强制它——可能正确也可能不正确。然后,如果你有一个 XSL,你需要确保手动处理你的空白,我的做法与string-join()和tokenize()类似。 -
可以做到。你可以从我对另一个问题的回答中得到一个完整的例子(SSCCE):stackoverflow.com/a/29780972/611007 (正如我上面解释的,这不是你尝试做的方式,但最终,它会像你想要的那样工作。)
标签: xml xslt whitespace