我有一个很长的XML文件,但这是一个摘录。
<?xml version="1.0" encoding="UTF-8"?>
<dicom>
<attr tag="00020000" vr="UL" len="4">190</attr>
<attr tag="00020001" vr="OB" len="2">00\01</attr>
<attr tag="00020002" vr="UI" len="30">1.2.840.10008.5.1.4.1.1.88.11</attr>
<attr tag="00080090" vr="PN" len="14">Roberts^^^Dr.^</attr>
</dicom>
我也有一个xslt文件也很长,但这里有一段摘录。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
<xsl:output method="xml" indent="yes" media-type="text/xml-fo" encoding="UTF-8"/>
<!-- the stylesheet processing entry point -->
<xsl:template match="/">
<xsl:apply-templates select="dicom"/>
</xsl:template>
<xsl:template match="dicom">
TEST
<xsl:variable name="name" select="attr[@tag='00080090']"/>
<xsl:value-of select="$name"/>
</xsl:template>
</xsl:stylesheet>
我有两个问题。 1.当我将xml应用于xslt时,我没有得到任何输出。经过测试,看来dicom模板甚至从未被调用过。为什么是这样? 2.如果我将dicom模板的匹配条件从“dicom”更改为“/”,那么它会被调用,但变量未正确设置。
我知道它不会生成有效的XML,我只想弄清楚发生了什么,以及我对xslt的理解有什么问题。
感谢!!!
答案 0 :(得分:3)
你的样本适合我。
请注意,如果匹配/
的模板只是在xsl:apply-templates
上执行dicom
,那么您实际上并不需要它,因为已经存在一个匹配的内置模板自动完全相同。