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,'>'),'<')"/>
<TEST>
<xsl:value-of select="$messageName"/>
</TEST>
</xsl:template>
</xsl:stylesheet>
预期产出
<TEST>ABCDEFG</TEST>
先谢谢
答案 0 :(得分:2)
在XSLT开始处理XML文档之前,必须将该文档解析为文档对象模型,并且此模型不了解有角度的括号。这些只出现在&#34; lexical&#34;在将XML视为文本时查看的XML。
XSLT将处理节点(元素,文本节点,注释和处理指令)。您的msgString
变量引用XML中的根元素ABCGEFGH
,而不是字符串。如果您尝试对其执行字符串函数,XSLT将使用该节点的文本值。
你需要做的只是这个......
<TEST>
<xsl:value-of select="name($msgString)"/>
</TEST>
您可能希望将msgString
重命名为msgNode
以外的其他内容,以避免混淆其中包含的内容。