当属性名称包含特殊字符时,使用 xslt 转换 xml 结果后,输出未以 HTML 格式显示

Posted

技术标签:

【中文标题】当属性名称包含特殊字符时,使用 xslt 转换 xml 结果后,输出未以 HTML 格式显示【英文标题】:Output is not displaying in HTML format after transforming the xml result using xslt when the attribute name contains special character 【发布时间】:2022-01-01 02:34:46 【问题描述】:

我的 xml 只有 1 个值,名称 =RDXXX-LOWER_DECK,值=10 毫米。当使用 xslt 进行转换时,我得到正确的输出如下:

 <table>
 <tr valign="top">
 <td >RDXXX-LOWER_DECK</td>
 <td >10.000000000000 mm</td>
 </tr>
 </table>

但是当我将 RDXXX-LOWER_DECK 替换为 RDXXX||LOWER_DECK(连字符被双管道替换)时,我没有得到输出。打印空值,名称打印为“属性”。

 <table>
 <tr valign="top">
 <td >Attribute</td>
 <td ></td>
 </tr>
 </table>

请告诉我如何保留 ||在输出中。

【问题讨论】:

请发布minimal reproducible example 显示示例输入和可执行样式表。 @mplungjan 链接的答案与这个问题完全无关。 【参考方案1】:

我的 xml 只有 1 个值作为名称 =RDXXX-LOWER_DECK,值 = 10 毫米。 但是当我将 RDXXX-LOWER_DECK 替换为 RDXXX||LOWER_DECK 时(连字符替换为双管道)...

如果你的意思是你有这样的 XML:

<RDXXX-LOWER_DECK>10mm</RDXXX-LOWER_DECK>

你把它改成这样:

<RDXXX||LOWER_DECK>10mm</RDXXX||LOWER_DECK>

那么您将不再拥有格式良好的 XML 文档。元素 name 中不允许使用 | 字符。

...我没有得到输出。打印空值,名称打印为“属性”。

这很奇怪,因为您应该遇到错误。

【讨论】:

好的,如果不是 "|" ,除“-”(连字符)外,任何其他特殊字符也不起作用 我提供了一个指向 XML 规范的链接,该规范明确列出了元素名称中允许使用的字符(或字符范围)。所有其他字符都“不起作用”。请注意,该列表对第一个字符的限制更大。此外,一些较旧的处理器可能符合较旧的规范,该规范也允许较少的字符。您在这里要解决的实际问题是什么? 谢谢迈克尔。基本上客户希望在最终输出中的 RDXXX 和 LOWER_DECK 之间有一些特殊字符(表格将采用 html 格式)。第一列的属性名称为 RDXXX||LOWER_DECK,在第二列中,它的值将显示为 10mm。但是在使用 xslt 转换属性名称“RDXXX||LOWER_DECK”时,不会处理特殊字符。 我不明白您的客户为什么关心元素的名称。而且我不确定什么是“特殊字符”。为什么连字符或句号不令人满意?如果他们想要看起来像垂直线的东西,他们可以使用&amp;#448; LATIN LETTER DENTAL CLICK 字符。但这毫无意义,因为您可以使用原始的、未修改的 XML 作为输入来输出您想要的任何结果。 连字符已在某些属性名称中使用。所以他们不想再在这里使用。无论如何感谢迈克尔,通过阅读 XMl 规范链接,我得到了一些清晰,我将讨论使用句点而不是 ||。

以上是关于当属性名称包含特殊字符时,使用 xslt 转换 xml 结果后,输出未以 HTML 格式显示的主要内容,如果未能解决你的问题,请参考以下文章

使用 XSLT 转换 xml 中的特殊字符

序列化时带有特殊字符的 XML 元素名称

使用 XSLT 进行属性转换

当列名包含特殊字符时,如何将 Convert 函数与 RowFilter/CustomFilter 一起使用?

java xslt 转换本地名称

XSLT 中的十进制格式以及字符