包含Substring的XML标签中的文本

时间:2018-04-23 10:40:31

标签: xml xslt substring

XSLT有点新鲜, 我有一个场景,我需要从XML子串文本,但我还需要考虑子串的标签。这是一个例子。

 <ABCGEFGH>
   <SYSTEMINFO>2432048324884329</SYSTEMINFO>
   <PARENT>0000001200003100569DDA0000000000000000080595</PARENT>
   <DETAIL>007542038808460056</DETAIL>
 </ABCGEFGH>

XSLT我正在尝试

XSLT

<?xml version="1.0" encoding="UTF-8"?>
   <xsl:stylesheet version="1.0"       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="text" indent="yes"/>
<xsl:template match="/">
    <!-- get the Operation Name from the request message -->
    <xsl:variable name="msgString" select="*"/>
    <xsl:variable name="messageName" select="substring-after(substring-before($msgString,'>'),'&lt;')"/>
    <TEST>
        <xsl:value-of select="$messageName"/>
    </TEST>
</xsl:template>
</xsl:stylesheet>

预期产出

 <TEST>ABCDEFG</TEST>

先谢谢

1 个答案:

答案 0 :(得分:2)

在XSLT开始处理XML文档之前,必须将该文档解析为文档对象模型,并且此模型不了解有角度的括号。这些只出现在&#34; lexical&#34;在将XML视为文本时查看的XML。

XSLT将处理节点(元素,文本节点,注释和处理指令)。您的msgString变量引用XML中的根元素ABCGEFGH,而不是字符串。如果您尝试对其执行字符串函数,XSLT将使用该节点的文本值。

你需要做的只是这个......

<TEST>
    <xsl:value-of select="name($msgString)"/>
</TEST>

您可能希望将msgString重命名为msgNode以外的其他内容,以避免混淆其中包含的内容。