我正在尝试仅匹配辅助内容xml标记。但是它正在输出文字“/ Main cotnent就在这里。”为什么要从标头和maincontent标签输出文本?
XML:
<xml>
<system-data-structure>
<mastheads>
<masthead>
<image>
<path>/</path>
</image>
<alt/>
</masthead>
</mastheads>
<maincontent>
<content>
<p>Main content goes here. </p>
</content>
</maincontent>
<secondary-content>
<title>
<h2>Secondary Content Title</h2>
</title>
<block>
<path>/</path>
</block>
<content>
<p>Secondary main content goes here. </p>
</content>
</secondary-content>
<secondary-content>
<title></title>
<block>
<content>
<div class="aux-content-box">
<h2 class="aux-content-box">More Information</h2>
<ul>
<li>
<a href="#">Air Force Tuition Assistance</a>
</li>
<li>
<a href="#">Army Tuition Assistance</a>
</li>
<li>
<a href="#">Coast Guard Tuition Assistance</a>
</li>
<li>
<a href="#">Marine Corps Tuition Assistance</a>
</li>
<li>
<a href="#">Navy Tuition Assistance</a>
</li>
<li>
<a href="#">National Guard State Tuition Assistance</a>
</li>
<li>
<a href="#">National Guard Federal Tuition Assistance</a>
</li>
<li>
<a href="#">Reserve Tuition Assistance</a>
</li>
<li>
<a href="#">US Department of Veteran Affairs: Tuition Assistance Top-Up Program</a>
</li>
</ul>
</div>
</content>
<path>/web/current-students/military/military-links-nav</path>
<name>military-links-nav</name>
</block>
<content/>
</secondary-content>
</system-data-structure>
</xml>
xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
<xsl:template match="/system-data-structure">
<xsl:apply-templates select="secondary-content" />
</xsl:template>
<xsl:template match="secondary-content">
Found a learner!
</xsl:template>
</xsl:stylesheet>
输出:
/ Main content goes here. Found a learner! Found a learner!
答案 0 :(得分:1)
这是一个经常被问到的问题。这是由于XSLT的built-in templates隐式驱动各种节点的处理。
使用以下模板覆盖文本节点的内置模板:
<xsl:template match="text()"/>
答案 1 :(得分:1)
行为的一个原因是您的第一个模板匹配行
<xsl:template match="/system-data-structure">
在您的XML中,根元素是 xml ,而不是 system-data-structure 。这意味着它与任何东西都不匹配,这就是为什么内置模板如前面的答案中所描述的那样。
尝试用此替换上述行...
<xsl:template match="/xml/system-data-structure">
然后应该产生以下输出
Found a learner! Found a learner!
答案 2 :(得分:1)
这是因为在您的第一个模板中,您尝试在根级别匹配system-data-structure
。但是,xml
是XML示例中的根级别。将匹配更改为/xml/system-data-structure
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
<xsl:template match="/xml/system-data-structure">
<xsl:apply-templates select="secondary-content" />
</xsl:template>
<xsl:template match="secondary-content">
Found a learner!
</xsl:template>
</xsl:stylesheet>