2015-01-28 4 views
0

Из-за проблемы с выпуском была повреждена куча данных. Хорошей новостью является то, что у меня есть все данные в XML-файле, который находится в том же формате, что и вход для отправки данных. Проблема, которую я имею, - это одна запись, которая требует времени для обработки. Мой «чистый мастер» имеет> 20000 записей, и только 530 были повреждены. У меня есть ключевое поле для идентификации записи, которую я хочу включить в мой пункт назначения. Как включить XSLT для вывода узла, только если он указан в списке, который я указываю? Мне все равно, если я перекодирую список в XSLT.Используйте XSLT для фильтрации исходного XML-адреса XML XML-адрес

<recordSet> 
    <record> 
    <key>123</key> 
    <val1>abc</val1> 
    <val2>def</val2> 
    </record> 
    <record> 
    <key>456</key> 
    <val1>hij</val1> 
    <val2>klm</val2> 
    </record> 
    <record> 
    <key>789</key> 
    <val1>nop</val1> 
    <val2>qrs</val2> 
    </record> 
</recordSet> 

Скажем, я хочу только записи с ключом 123 и ключ 789. Спасибо.

+0

Какую версию XSLT? –

+0

1 или 2, так как это, скорее всего, будет запущено только в таком инструменте, как Altova (вручную). У меня больше гибкости. – Walinmichi

ответ

1

Мне все равно, если я перекодирую список в XSLT.

Вот как вы можете сделать это эффективно и элегантно в XSLT 1.0:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:exsl="http://exslt.org/common" 
extension-element-prefixes="exsl"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:variable name="keys"> 
    <key>123</key> 
    <key>789</key> 
</xsl:variable> 

<xsl:key name="record" match="record" use="key" /> 

<xsl:template match="/recordSet"> 
    <xsl:copy> 
     <xsl:copy-of select="key('record', exsl:node-set($keys)/key)"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

В XSLT 2.0 это может быть уменьшено до:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:variable name="keys"> 
    <key>123</key> 
    <key>789</key> 
</xsl:variable> 

<xsl:key name="record" match="record" use="key" /> 

<xsl:template match="/recordSet"> 
    <xsl:copy> 
     <xsl:copy-of select="key('record', $keys/key)"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
Смежные вопросы