我有一个以下格式的 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>
其他信息:
- 每个“EntityData”对象下可以有数千个“Data”节点</li>
- 任何“名称”属性的值都不会重复。
我必须创建一个 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/