XML Schematron中的换行符和空格

时间:2015-01-06 15:15:43

标签: java xml schematron

我有问题。我在XML中有换行符,空格和制表符。像这样:

<value xs:type="DV_TEXT"><value>1111\this is what it is used for, this could be a   
really long line or even
multiple lines, just like
what you are reading now
</value></value>

来自org.w3c.dom的Java中的setTextContent和getTextContent处理得很好。没问题。

但是现在,我正在生成Schematron以进行验证,以检查该字符串是否确实出现在值中。 Schematron是从定义文件生成的,其中测试字符串是可配置的

生成的Schematron,断言测试如下:

test="(matches(.,'1111\this is what it is used for, this could be a really long line or even&#xD;&#xA;multiple lines, just like&#xD;&#xA;what you are reading now'))"

然后当我验证时,会出现更多问题。 首先是划线。似乎在生成Schematron的定义文件中,\r\n而不是\n。 但是,我必须指望这一点。如果我仅用&#xD;&#xA;替换所有&#xA;,则某些错误会消失。我怎样才能确定XML文件只有&#xA;作为换行符?

我认为我需要更改测试断言中的字符串,例如,将所有\r\n替换为\n

我已经做到了,它解决了我的问题。我还应该考虑什么?

欢迎所有提示。

1 个答案:

答案 0 :(得分:1)

如果您希望节点文本无论其空格是否有效,请使用 normalize-space function 函数:

  

normalize-space函数返回带有空格的参数字符串,该空格通过剥离前导和尾随空格并用空格替换空格字符序列来规范化。 [...]

所以,这应该有效:

test="(matches(normalize-space(.),'1111\this is what it is used for, this could be a really long line or even multiple lines, just like what you are reading now'))