【问题标题】:Filtering one XML using nodes from a second XML in XSLT 1.0在 XSLT 1.0 中使用来自第二个 XML 的节点过滤一个 XML
【发布时间】:2016-05-02 14:12:42
【问题描述】:

下面是两个 XML 文件。我想使用 name 字段将 XMLA 过滤到仅存在于 XMLB 中的那些人。

两个 XML 文档都存储在变量 $XMLA 和 $XMLB 中。

我使用 XQuery 1.0 创建了输出,但我不确定如何在 XSLT 1.0 中执行相同的操作。

XMLA:

<table>
 <row>
  <name>NNN</name>
  <address>1234 NN</address>
  <phone>23423423</phone>
 </row>
 <row>
  <name>kkk</name>
  <address>1234 KK</address>
  <phone>4343434</phone>
  </row>
</table>

XMLB:

<table>
 <row>
  <id>1111</id>
  <batch>1212</batch>
  <name>NNN</name>
 </row>
 <row>
  <id>2222</id>
  <batch>2121</batch>
  <name>kkk</name>
 </row>
</table>

XQuery:

for $y in fn:doc('XMLA.xml')/table/row
for $x in fn:doc('XMLB.xml')/table/row
for $a in $x/name
where $y/name = $a
order by $y/name
return $y

我研究 XSLT 的原因是因为 XQuery 对大型 XML 文件的解析非常慢。我不确定这是否是因为我的 XQuery 构建错误,但我想尝试 XSLT 并比较效率。

【问题讨论】:

    标签: xml xslt-1.0 xquery ibm-datapower


    【解决方案1】:

    看起来您的 XQuery 方法为文档 A 中的每个 &lt;row&gt; 分配了一个全新的文档 B。

    使用变量将文档存储一次。

    xquery version "1.0";
    
    (: your call to fn:doc('XMLA.xml') here :)
    let $A := <table>
     <row>
      <name>NNN</name>
     </row>
     <row>
      <name>kkk</name>
     </row>
     <row>
      <name>xxx</name>
     </row>
    </table>
    
    (: your call to fn:doc('XMLB.xml') here :)
    let $B := <table>
     <row>
      <name>nnnn</name>
     </row>
     <row>
      <name>kkk</name>
     </row>
     <row>
      <name>xxx</name>
     </row>
    </table>
    
    let $nameA := $A/row/name
    let $nameB := $B/row/name
    
    for $name in $nameA
    where $name = $nameB
    order by $name
    return $name
    

    返回

    <name>kkk</name>
    <name>xxx</name>
    

    对我来说。检查性能是否有所改善。

    【讨论】:

    • 这非常有效。这已将解析时间从 30 秒(根据我的方法)显着减少到 ~1 秒(使用您的建议)。非常感谢!
    • XSLT 有一个功能可以帮助减少非常大的输入 (xsl:key) 的处理时间,但我会说使用你在这里拥有的东西,1 秒听起来并不合理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多