我的XML文件包含几个名称空间,这些名称空间阻止了我的xsl的正确执行。删除xml文件中的命名空间是使用xsl的唯一选项。但我想将原始xml文件与命名空间一起使用。我应该如何操纵我的xsl才能工作?
XML:
<body>
XSL:
<?xml version="1.0" encoding="utf-8"?>
<SymbolLibrary xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://relaxng.org/ns/structure/1.0
file:/D:/DevPool/MiStyle/Src/SymbolLibrary_1_0_0_1.xsd">
<IconComponents>
<IconComponent Id="10001">
<Name>PIK-PAR-Eiffelturm</Name>
<IconElems>
<BezierPolygon>
<ColorId>198</ColorId>
</BezierPolygon>
</IconElems>
</IconComponent>
<//IconComponents>
任何人都可以给我一个提示吗?
答案 0 :(得分:0)
&#34;防止正确的XSL执行&#34;这是一个很好的措辞,但是你可能怀疑你的xslt并没有告诉它正确的做法
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:relax="http://relaxng.org/ns/structure/1.0">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
然后放松:放到模板中的所有位置,选择和引用这样一个标签的值(在输入xml中没有命名空间)
请注意,这将为您提供名称空间为relax:
为避免这种情况,请使用
<xsl:template match="node()|@*">
<xsl:element name="local-name()">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="relax:IconComponent[@Id='10001']//relax:ColorId/text()[.='210']">21</xsl:template>