感谢您的期待。XSLT,显示PCDATA为CDATA
我正在尝试编写一个.xsl文件,它将生成HTML,通过仅显示具有适用性代码的文本来更容易地错误检查我们的.xml文件。
我们XML的普通查看器应用程序将根据XML中的应用代码过滤内容。 (适用性代码代表各个车型。)无法禁用查看器应用程序中的过滤,这意味着可能有人必须多次检查每个文件(每个应用代码一次)以确保每个模型的正确性。
我有嵌套在它的标签XML数据:
<para>Disconnect main chassis wire harness connector
MC57 (<xref applicable="UOC_GP0 UOC_HG0 UOC_WC0 UOC_2U0"
figid="F01"/><xref applicable="UOC_GP1 UOC_HG1 UOC_WC1
UOC_2U1" figid="F01A"/>, Item 3) from main cab wire
harness connector MC57 (<xref applicable="UOC_GP0
UOC_HG0 UOC_WC0 UOC_2U0" figid="F01"/>
<xref applicable="UOC_GP1 UOC_HG1 UOC_WC1 UOC_2U1"
figid="F01A"/>, Item 2).</para>
相关的XSL很简单:
<xsl:for-each select="para">
   Step1 Para:  
<xsl:value-of select="." /><br />
</xsl:for-each>
但滤除外部参照标签和离开输出:
Step1 Para: Disconnect main chassis wire harness connector
MC57 (, Item 3) from main cab wire harness connector MC57 (, Item 2).
输出对于如何写入xsl是正确的,但不是我想要的。
我想输出中包含外部参照标签和他们的属性,它们混合成的对,作为书面:
Disconnect main chassis wire harness connector
MC57 (<xref applicable="UOC_GP0 UOC_HG0 UOC_WC0 UOC_2U0"
figid="F01"/><xref applicable="UOC_GP1 UOC_HG1 UOC_WC1
UOC_2U1" figid="F01A"/>, Item 3) from main cab wire
harness connector MC57 (<xref applicable="UOC_GP0
UOC_HG0 UOC_WC0 UOC_2U0" figid="F01"/>
<xref applicable="UOC_GP1 UOC_HG1 UOC_WC1 UOC_2U1"
figid="F01A"/>, Item 2).
这是丑陋的,但将让评卷人知道有与适用性外部参照在第
在xsl中,有没有办法指示处理器应该将标记的内容视为CDATA而不是PCDATA?这似乎是显而易见的解决方案,但我没有找到办法做到这一点。
或者其他方式去做这件事?随着在para标签随机嵌入xref标签,我有点难住。
感谢
那么您使用哪种XSLT版本的XSLT处理器?如果输出是HTML,但您想要在输入中显示某些节点的XML标记,则需要对它们进行序列化,这在XSLT 3中是可行的(由开源Saxon 9.8 HE支持),例如, ''而不是''你有'的值'。 –
你也可以做一个'xsl:apply-templates'并匹配'xref'并自己序列化它。 –
对我来说,最明显的解决方案是转换每个''(包括文本节点的孩子)的所有孩子,而不是输出其字符串值,就像您迄今为止收到的答案一样。当然这是最自然的解决方案。 –