xml - 如何使用 Xpath 或 XSLT 从 XML 中提取特定值
问题描述
我需要根据 Day 为每个 AvamarGrid 提取值。
<AvamarGridTime Day="Monday">
<AvamarGrid>frk-opavautl921</AvamarGrid>
</AvamarGridTime>
<AvamarGridTime Day="Tuesday">
<AvamarGrid>ftc-opavautl961</AvamarGrid>
<AvamarGrid>ftc-opavbutl921</AvamarGrid>
<AvamarGrid>ptc-opavautl981</AvamarGrid>
</AvamarGridTime>
<AvamarGridTime Day="Wednesday">
<AvamarGrid>lhr-opavautl941</AvamarGrid>
</AvamarGridTime>
a
<AvamarGridTime Day="Thursday">
<AvamarGrid>sf1-its-bku-t01</AvamarGrid>
<AvamarGrid>sf1-opavautl901</AvamarGrid>
</AvamarGridTime>
<AvamarGridTime Day="Friday">
<AvamarGrid>par-opavautl921</AvamarGrid>
</AvamarGridTime>
</AvamarGrids>
我在 XSLT 下面使用
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="no" />
<xsl:template match="/">
<Day>
<xsl:for-each select="//AvamarGridTime">
<xsl:if test="//AvamarGridTime[@Day="Monday"]">
<xsl:value-of select="AvamarGrid" disable-output-escaping="no" />
</xsl:if>
</xsl:for-each>
</Day>
</xsl:template>
</xsl:stylesheet>
但是,低于输出,而不仅仅是:frk-opavautl921
<?xml version="1.0" encoding="UTF-8"?><Day>frk-opavautl921ftc-opavautl961lhr-opavautl941sf1-its-bku-t01par-opavautl921</Day>
解决方案
你的测试:
<xsl:if test="//AvamarGridTime[@Day="Monday"]">
检查整个 XML 输入中是否存在属性为 Monday的AvamarGridTime
元素。这对每个检查的节点都返回 true。要仅测试当前节点,请将其更改为:Day
<xsl:if test="@Day="Monday"">
或者简单地做:
<xsl:template match="/AvamarGrids">
<Day>
<xsl:value-of select="AvamarGridTime[@Day='Monday']/AvamarGrid" />
</Day>
</xsl:template>
添加:
为了在 selected中Day
为每个元素创建一个单独的元素,您可以执行以下操作:AvamarGrid
AvamarGridTime
<xsl:template match="/AvamarGrids">
<xsl:for-each select="AvamarGridTime[@Day='Tuesday']/AvamarGrid">
<Day>
<xsl:value-of select="." />
</Day>
</xsl:for-each>
</xsl:template>
但是,请注意结果是一个 XML 片段。如果要生成格式良好的 XML 文档,则必须添加根元素。
推荐阅读
- r - 根据不同列中的条件创建一个汇总先前列条目的列
- javascript - 无法在 VS Code 中使用 Live Server 加载基本 HTML 文档
- javascript - 为什么这个 [circle] 元素会附加在数组的末尾?
- python-3.x - 使用 dcc.Interval 自动更新 Dash 应用程序不起作用
- android - 刷新时显示小部件消息“出现问题..”
- c# - 如何使用 .net 客户端 Nest 将对象插入弹性搜索
- flutter - Getx() 并隐藏底部导航栏 - 有状态小部件呈现错误
- react-native - 发现 1 个高危漏洞 (react-native-svg)
- java - mongoDB hibernate-ogm (5.4.1.Final) 删除实体保留_id字段
- oauth-2.0 - 单独的状态参数能否为具有机密客户端的 OIDC 提供足够的保护?