gpt4 book ai didi

XSLT 总和来自另一个文件的查找值

转载 作者:行者123 更新时间:2023-12-01 04:11:20 25 4
gpt4 key购买 nike

我想从以下 2 个 XML 文件中获取特定学生的总数:

--- 文件:mark.xml ----

<marks>
<mark type="HD">10</mark>
<mark type="D">8</mark>
<mark type="C">5</mark>
</marks>

--- 文件: studentRecord.xml ---
<students>
<student id="1234">
<grade>HD</grade>
</student>
<student id="1234">
<grade>C</grade>
</student>
<student id="1111">
<grade>D</grade>
</student>
</students>

我怎样才能得到有 id 1234的学生的总分?应该是15。

最佳答案

这是一个简短而简单的 XSLT 解决方案 (实际上它只是XPath):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output method="text"/>

<my:MarkValues>
<marks>
<mark type="HD">10</mark>
<mark type="D">8</mark>
<mark type="C">5</mark>
</marks>
</my:MarkValues>

<xsl:template match="/*">
<xsl:value-of select=
"sum(document('')/*
/my:MarkValues/*/*
[@type = current()/*
[@id='1234']/grade
]
)"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时 (名为“studentRecord.xml”):
<students>
<student id="1234">
<grade>HD</grade>
</student>
<student id="1234">
<grade>C</grade>
</student>
<student id="1111">
<grade>D</grade>
</student>
</students>

产生了想要的答案 :
15

如果要将标记值保留在单独的文件中 (没有像上面那样嵌入到 XSLT 样式表中), XPath 表达式应该稍微改变 (只是 document() 函数的参数:
sum(document('mark.xml')/*/*
[@type = current()/*
[@id='1234']/grade
]
)

说明 :
  • 使用 XSLT document() 功能。
  • 使用 XSLT current() 功能。
  • 使用 XPath sum() 功能。
  • 关于XSLT 总和来自另一个文件的查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071457/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com