我正在尝试帮助朋友解决计算机课程带回家的测验。我有一个简单的 XML 文件,如下所示,它定义了我在我的书架上拥有的 DVD 标题......
<Inventory>
<DVD>
<Name>Captain America</Name>
</DVD>
<DVD>
<Name>Green Lantern</Name>
</DVD>
<DVD>
<Name>Thor</Name>
</DVD>
</Inventory>
Run Code Online (Sandbox Code Playgroud)
假设“美国队长”和“雷神”都已签出,而“绿灯侠”仍然可用。我想将上述 XML 文件转换为以下 XML ...
<Inventory>
<DVD>
<Name>Captain America</Name>
<Status>Checked-Out</Status>
</DVD>
<DVD>
<Name>Green Lantern</Name>
<Status>Available</Status>
</DVD>
<DVD>
<Name>Thor</Name>
<Status>Checked-Out</Status>
</DVD>
</Inventory>
Run Code Online (Sandbox Code Playgroud)
有人可以分享如何利用 XSL 将 Status 元素添加到每个节点吗?我只有下面的代码片段,但它为所有节点复制了相同的元素。
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="DVD">
<xsl:copy>
<xsl:copy-of select="@*|node()"/>
<Status>Checked-Out</Status>
</xsl:copy>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
非常非常非常非常感谢...
您可以做的是使用 anxsl:param
将检出的 DVD 的名称传递到您的 XSL 并添加<status>
基于该名称的名称。通过使用xsl:param
,您可以从命令行传递值。
这是一个 XSLT 2.0 示例,其中 DVD 名称在xsl:param
. 我使用tokenize()
我的,xsl:template match
以便这些 DVD 获得“已签出”状态。所有其他 DVD 将获得“可用”状态。
XSLT 2.0 样式表:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="checkedOut" select="'Captain America|Thor'"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="DVD[Name=tokenize($checkedOut,'\|')]">
<xsl:copy>
<xsl:apply-templates/>
<status>Checked-Out</status>
</xsl:copy>
</xsl:template>
<xsl:template match="DVD">
<xsl:copy>
<xsl:apply-templates/>
<status>Available</status>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
应用于您的示例 XML 会产生以下输出:
<Inventory>
<DVD>
<Name>Captain America</Name>
<status>Checked-Out</status>
</DVD>
<DVD>
<Name>Green Lantern</Name>
<status>Available</status>
</DVD>
<DVD>
<Name>Thor</Name>
<status>Checked-Out</status>
</DVD>
</Inventory>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
归档时间: |
|
查看次数: |
10853 次 |
最近记录: |