我有一个XML文件,我试图通过XSL文件进行转换。一旦我将非空白xmlns属性添加到我的XSL的根元素,转换就会给我带回所有内容的空白数据。如果我删除或删除xmlns属性,我会得到我期望的结果。
任何人都可以告诉我为什么会这样,所以我可以阻止它!
这是我的一些XSL(省略了一些部分并用...替换):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ... >
<xsl:import href="html_commonstructures.xsl"/>
<xsl:output method="html"/>
<xsl:template match="/">
<div>
<xsl:call-template name="ServiceStructure">
<xsl:with-param name="structure" select="ServiceDescription" />
</xsl:call-template>
</div>
</xsl:template>
<xsl:template name="ServiceStructure">
<xsl:param name="structure"/>
<h3>
<xsl:value-of select="$structure/DC.Title" /> (<xsl:value-of select="$structure/DC.Identifier" />)
</h3>
<!-- And so on -->
</xsl:template>
</xsl:stylesheet>
*编辑* 这是html_commonstructures中的内容片段:
<?xml version='1.0' encoding='UTF-8' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rxr="http://ilrt.org/discovery/2004/03/rxr/" xmlns:esd="http://www.esd.org.uk/standards"
xmlns:core="http://www.govtalk.gov.uk/core" xmlns:n2="http://www.govtalk.gov.uk/metadata/egms"
xmlns:apd="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails"
xmlns:con="http://www.govtalk.gov.uk/people/ContactTypes"
xmlns:bs7666="http://www.govtalk.gov.uk/people/bs7666">
<!-- A template for the ControlledListStructures -->
<xsl:template name="ControlledListStructure">
<xsl:param name="structure"/>
<p class="controlledlist">
<xsl:value-of select="$structure/text()" />
<xsl:if test="$structure/@Id | $structure/@ConceptId | $structure/@ItemName | $structure/@ListName">
<span class="metainfo">[
<xsl:if test="$structure/@Id">
ID: <xsl:value-of select="$structure/@Id" />;
</xsl:if>
<xsl:if test="$structure/@ConceptId">
Concept ID: <xsl:value-of select="$structure/@ConceptId" />;
</xsl:if>
<xsl:if test="$structure/@ItemName">
Item Name: <xsl:value-of select="$structure/@ItemName" />;
</xsl:if>
<xsl:if test="$structure/@ListName">
List Name: <xsl:value-of select="$structure/@ListName" />
</xsl:if>
]
</span>
</xsl:if>
</p>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:4)
为什么首先添加xmlns命名空间定义?
通过添加xmlns属性,您可以更改XSLT的默认命名空间。您必须调整所有表达式以使用输入文档的命名空间,即使用自由前缀添加输入文档的命名空间定义并替换例如带有'myPrefix:SerciveDescription'的表达式'ServiceDesription'。
答案 1 :(得分:2)
如果XML文档上有命名空间,则需要在XSLT上具有相同的命名空间。