英文:
XSLT: XML Root element not matched
问题
这次,然而,我遇到了问题 "起飞",即:由于某种奇怪的原因,当我命名它时,XML 根元素没有匹配。然而,当我只使用 /
时,它将会匹配。
让我们开始看一下 XML 文档的大纲(我没有编写它; "专业公司" 创建这样的):
<?xml version="1.0" encoding="utf-8"?>
<PartnerMasterDataSet xmlns="http://tempuri.org/PartnerMasterDataSet.xsd">
<Partner>
<Id>40</Id>
<!-- ... -->
</Partner>
</PartnerMasterDataSet>
最后一行没有尾随的 EOL 序列(如果有关系的话)。
有多个类似 Id
的元素(以及多个 Partner
)。
我在我的 XSL 中尝试了什么:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:template match="/PartnerMasterDataSet">
<table>
<!-- <xsl:apply-templates select="Partner" /> -->
</table>
</xsl:template>
</xsl:stylesheet>
我正在使用 libxslt-tools-1.1.28
中的 xsltproc
来处理输入,如果重要的话。
当使用 match="/"
时,我得到了一个匹配(详细消息),如下所示:
xsltProcessOneNode: applying template '/' for /
xsltApplySequenceConstructor: copy text root
然而,当我使用 match="/PartnerMasterDataSet"
(或 match="//PartnerMasterDataSet"
)时,我没有匹配,这一点我不明白。
然后,消息如下:
xsltProcessOneNode: no template found for /
xsltProcessOneNode: no template found for PartnerMasterDataSet
英文:
I'm a XSLT beginner, but managed to write one successful transformation in the recent past.
This time, however I'm having trouble "lifting off", i.e.: For some odd reason the XML root element isn't matched when I name it.
However it will be matched when I use just /
.
Let's start seeing the outline of the XML document (I didn't write that; "professional companies" create such):
<?xml version="1.0" encoding="utf-8"?>
<PartnerMasterDataSet xmlns="http://tempuri.org/PartnerMasterDataSet.xsd">
<Partner>
<Id>40</Id>
<!-- ... -->
</Partner>
</PartnerMasterDataSet>
The final line has no trailing EOL sequence (in case that matters).
There are multiple elements like Id
(and multiple Partner
s).
What I tried in my XSL:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:template match="/PartnerMasterDataSet">
<table>
<!-- <xsl:apply-templates select="Partner" /> -->
</table>
</xsl:template>
</xsl:stylesheet>
I'm using xsltproc
from libxslt-tools-1.1.28
to process the input, in case it's important.
When using match="/"
, I get a match (verbose messages) like this:
xsltProcessOneNode: applying template '/' for /
xsltApplySequenceConstructor: copy text root
However when I use match="/PartnerMasterDataSet"
(or match="//PartnerMasterDataSet"
), the I don't get a match, which I don't understand.
Then the messages are:
xsltProcessOneNode: no template found for /
xsltProcessOneNode: no template found for PartnerMasterDataSet
答案1
得分: 1
将命名空间添加到您的脚本中...
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xx="http://tempuri.org/PartnerMasterDataSet.xsd">
<xsl:output indent="yes" />
<xsl:template match="/xx:PartnerMasterDataSet">
<table>
</table>
</xsl:template>
</xsl:stylesheet>
英文:
just add the namespace to your script...
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xx="http://tempuri.org/PartnerMasterDataSet.xsd">
<xsl:output indent="yes" />
<xsl:template match="/xx:PartnerMasterDataSet">
<table>
</table>
</xsl:template>
</xsl:stylesheet>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论