XML到XSLT模式没有';不匹配
为了一个小任务,我正在使用XSLT。 我有以下XML:XML到XSLT模式没有';不匹配,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,为了一个小任务,我正在使用XSLT。 我有以下XML: <PFeed> <PID> MyProcess </PID> <Version>1</Version> <MetaData> <Id> MyMetadataId </Id> </MetaData> <AllFeeds> <FeedContent> <Id&
<PFeed>
<PID> MyProcess </PID>
<Version>1</Version>
<MetaData>
<Id> MyMetadataId </Id>
</MetaData>
<AllFeeds>
<FeedContent>
<Id> FeedContentId </Id>
</FeedContent>
</AllFeeds>
</PFeed>
但是,我没有输出FeedContentId
,而是得到以下结果:
MyProcess 1 MyMetadataId FeedContentId
您能指出我缺少什么吗?您首先需要一个模板来匹配根元素,然后匹配其中的内容。这个XSLT现在又可以工作了。(测试,例如打开)
但是,同样的事情(获取
/PFeed/allfeed/FeedContent/Id
节点)也可以通过评估上述简单的XPath表达式来实现。当前XSLT代码的输出是:
MyProcess 1 MyMetadataId FeedContentId
这是输入XML文档中的所有文本。这是因为样式表中只有一个模板,它并不适用于输入文档中的所有内容。对于输入的一部分,XSLT处理器必须求助于预定义的默认模板
元素的默认模板跳过元素,文本节点的默认模板复制这些文本节点,而这正是所发生的
一种解决方案是使用一个模板直接针对您感兴趣的内容(/PFeed/allfeed/FeedContent/Id
),然后编写另一个与文本节点匹配的模板:
<xsl:template match="text()"/>
联机尝试此解决方案。此XSLT样式表不起作用<代码>xsl:value of不能在
xsl:apply模板
内。请在将代码作为答案提交之前对其进行测试。不过,在上面指定的测试页面中,它确实有效。无论如何,由于OP使用xpath表达式,XSLT并不重要。我将添加一条注释,说明它已损坏。此代码始终处于损坏状态。如果这样做有效,XSLT的实现就不正确。永远不要相信w3schools.com上的任何东西,这里有一个可靠的选择:。
FeedContentId
MyProcess 1 MyMetadataId FeedContentId
<xsl:template match="text()"/>
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/PFeed/AllFeeds/FeedContent/Id">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
FeedContentId