【问题标题】:line breaks and spaces in XML SchematronXML Schematron 中的换行符和空格
【发布时间】:2015-01-06 15:15:42
【问题描述】:

我有问题。我在 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&#xD;&#xA;multiple lines, just like&#xD;&#xA;what you are reading now'))"

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

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

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

欢迎所有提示。

【问题讨论】:

  • "我如何确定 XML 文件也只有 &amp;#xA; 作为换行符" - according to the spec XML 解析器在读取 XML 文件时必须始终将行尾规范化为 U+000A ,无论原始文件包含什么。您应该看到的唯一 U+000D 字符是那些首先表示为字符引用的字符。

标签: java xml schematron


【解决方案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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2021-09-19
    • 2022-11-17
    相关资源
    最近更新 更多