XSLT从XSLT结果中删除不需要的XML
我有一个XML,它包含一个XML作为字符串:XSLT从XSLT结果中删除不需要的XML,xml,xslt,Xml,Xslt,我有一个XML,它包含一个XML作为字符串: <Result> <XML> <PingRS xmlns="http://www.test.com"> <Message> Hello. </Message> </PingRS> </XML> &l
<Result>
<XML>
<PingRS xmlns="http://www.test.com">
<Message>
Hello.
</Message>
</PingRS>
</XML>
</Result>
PingRS xmlns=”http://www.test.com"
消息
你好
/信息
/平格斯
我正在使用以下XSLT对其进行转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:template match="/Result">
<xsl:value-of select="XML" disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
要获得此结果,请执行以下操作:
<PingRS xmlns="http://www.test.com">
<Message>Hello.</Message>
</PingRS>
你好
我想删除同一XSLT文件中的
xmlns
属性。这是可能的吗?这是可能的,但是由于
元素不包含XML,因此必须通过字符串操作来完成:
<xsl:template match="/Result">
<xsl:variable name="xmlns" select="' xmlns="http://www.test.com"'" />
<xsl:value-of select="substring-before(XML, $xmlns)" disable-output-escaping="yes" />
<xsl:value-of select="substring-after(XML, $xmlns)" disable-output-escaping="yes" />
</xsl:template>
顺便说一句,你展示的结果是不正确的-你真正得到的是:
<PingRS xmlns="http://www.test.com">
<Message>
Hello.
</Message>
</PingRS>
你好
编辑: 如果事先不知道xmlns的内容,可以使用:
<xsl:template match="/Result">
<xsl:value-of select="substring-before(XML, ' xmlns="')" disable-output-escaping="yes" />
<xsl:value-of select="substring-after(substring-after(XML, ' xmlns="'), '"')" disable-output-escaping="yes" />
</xsl:template>
您能转换两次(不同的样式表或相同的样式表)吗?谢谢。如果xmlns的内容将被更改,我可以在select中使用regex吗?像select=“'xmlns=“*””
?@bale3一样,您不能在XSLT1.0中使用正则表达式;您只需要使用更复杂的字符串操作-请参阅对我的答案的编辑。答案是使用字符串操作。XSLT中的字符串操作与任何编程语言中使用字符串的XML处理具有相同的弱点。也就是说,XSLT正好在这种情况下工作,但不适用于等价的XML,如x:PingRS-xmlns:x=”http://www.test.com“y:消息xmlns:y=”http://www.test.com“你好/y:Message/x:PingRS
。因此,如果您无法控制输入,给定的解决方案可能无法工作。@ThomasW。1.给定的输入包含一个需要修改的字符串;因此,需要对字符串进行操作。2.一般来说,XSLT以其设计的格式(语法、模式)进行输入;这不限于字符串。