xml - xsl :value-of 的最快 XPath 表达式

标签 xml xslt xpath value-of

我有一个以下格式的 XML 文档:

<Contents>
  <Content Name="ClientXML">
    <EntityData>
        <Data Name="EQ_EligibleForGuaranteedIssue">Yes</Data>
        <Data Name="ABRInd">NO</Data>
        <Data Name="AC_AgentNo">12345</Data>
        <Data Name="AC_AgentPersonallyMetWithApplicant">Has</Data>
        <Data Name="AC_City">Pomona</Data>
        <Data Name="AC_FirstName">Kimmy</Data>
        <Data Name="AC_FullName">Kimmy N Jackson</Data>
        <Data Name="AC_Initials">K J</Data>
        <Data Name="AC_LastAndSuf">Jackson</Data>
        ...
    </EntityData>
  </Content>
  <Content Name="UserXML">
    <EntityData>
        <Data Name="TransRefGUID">789-456-123456789-456</Data>
        ...
    </EntityData>
  </Content>
</Contents>

其他信息:

  1. 每个“EntityData”对象下可以有数千个“Data”节点<​​/li>
  2. 任何“名称”属性的值都不会重复。

我必须创建一个 XSL 转换并使用 xsl:value-of select="..."函数​​。我的问题是,哪种 XPath 表达式执行速度最快?例如

<xsl:value-of select="\\Contents\Content[@Name="ClientXML"\EntityData\Data[@Name=".."]">

或者只是

<xsl:value-of select="\\Data[@Name=".."]">

我无权访问最终将运行此进程的终端服务器,并且在本地,第二个选项可能看起来更快一些。

想知道是否有人有意见,并且在更大范围内是否可以更快。

谢谢!

最佳答案

在 XSLT 中使用键比 XPath 表达式要快得多,尤其是带有 // 的表达式,它的执行速度可能非常慢,只应在必要时使用。

<xsl:key match="Content" use="@Name" name="MyContentsLookup"/>
...
<xsl:value-of select="key('MyContentsLookup','ClientXML')"/>

XSLT 处理器可以实现内部搜索机制以在数万个条目中快速查找值,这比使用 XPath 快得多。

我在这里发布了 XSLT key 的概述:http://www.CraneSoftwrights.com/resources/xslkeys/index.htm

关于xml - xsl :value-of 的最快 XPath 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18993406/

相关文章:

java - 带有 PropertyPlaceholderConfigurer bean 的 Spring @Configuration 文件无法解析 @Value 注释

.net - 我们可以强制 XmlWriter 发出 <my-tag></my-tag> 而不是 <my-tag/> 吗?

javascript - 如何使用 XSL 属性传递两个或多个参数

css - 如何在不丢失样式 xsl 的情况下更新 xml 文件?

xpath - Jmeter while controller 似乎没有将变量评估为数字

css - 继承 web.assets_backend 时出错

java - 错误 :(125, 25) 错误:AdRequest() 在 AdRequest 中具有私有(private)访问权限

xml - 如何在 fop 生成的 pdf 中显示预格式化的文本?

xml - XPath选择

javascript - 如何提取两个节点之间的文本内容