XML Schematron 中的换行符和空格
line breaks and spaces in 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,assert-test 如下所示:
test="(matches(.,'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'))"
然后当我验证时,出现了更多问题。
首先是换行符。似乎在生成 Schematron 的定义文件中有 \r\n
而不是只有 \n
。
但是,我必须指望这一点。如果我只用
替换所有
,一些错误就会消失。我如何确定 XML 文件也只有
作为换行符?
我认为我需要更改测试断言中的字符串,例如,仅将所有 \r\n
替换为 \n
.
我已经做到了,它部分解决了我的问题。我还应该考虑什么?
欢迎所有提示。
如果您希望节点文本有效而不考虑其 空格 使用 normalize-space function 函数:
The normalize-space function returns the argument string with whitespace normalized by stripping leading and trailing whitespace and replacing sequences of whitespace characters by a single 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'))
我有问题。我在 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,assert-test 如下所示:
test="(matches(.,'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'))"
然后当我验证时,出现了更多问题。
首先是换行符。似乎在生成 Schematron 的定义文件中有 \r\n
而不是只有 \n
。
但是,我必须指望这一点。如果我只用
替换所有
,一些错误就会消失。我如何确定 XML 文件也只有
作为换行符?
我认为我需要更改测试断言中的字符串,例如,仅将所有 \r\n
替换为 \n
.
我已经做到了,它部分解决了我的问题。我还应该考虑什么?
欢迎所有提示。
如果您希望节点文本有效而不考虑其 空格 使用 normalize-space function 函数:
The normalize-space function returns the argument string with whitespace normalized by stripping leading and trailing whitespace and replacing sequences of whitespace characters by a single 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'))