2014-02-28 40 views
-1

我需要使用XSL在xml中的两个元素之间提取几个元素,并将提取的内容写入到xml文件中。如何使用XSL 2.0选择xml文件中两个特定元素之间的多个元素

我有下面的XML。

<?xml version="1.0" encoding="UTF-8"?> 
    <root> 
    <element_1> 
     <h1>title</h1> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <table> 
     <tr> 
      <td /> 
     </tr> 
     </table> 
     <h1>Another Title</h1> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <table> 
     <tr> 
      <td/> 
     </tr> 
     </table> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <table> 
     <tr> 
      <td/> 
     </tr> 
     </table> 
     <h1>Some other Title</h1> 
     <p>paragraph</p> 
     <table> 
     <tr> 
      <td/> 
     </tr> 
     </table> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <table> 
     <tr> 
      <td/> 
     </tr> 
     </table> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
    </element_1> 
    <element_2/> 
</root> 

XSL是新的给我,并面临生成与提取的内容的新文件的难度。不知何故,我可以管理生成新文件,但无法提取两个特定()标签之间的标签。以上XML是第三方工具的输出。

请分享您的想法或者如果有人有想法提取标签之间的元素?

预期的输出应该看起来像下面:

File1.xml:

<modified> 
    <h1>title</h1> 
    <p>paragraph</p> 
    <p>paragraph</p> 
    <p>paragraph</p> 
    <p>paragraph</p> 
    <table><tr><td/></tr></table> 
</modified> 

File2.xml:

<modified> 
     <h1>Another Title</h1> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <table><tr><td/></tr></table> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <p>paragraph</p> 
     <table><tr><td/></tr></table> 
    </modified> 

File3.xml:

<modified> 
    <p>paragraph</p> 
    <table><tr><td/></tr></table> 
    <p>paragraph</p> 
    <p>paragraph</p> 
    <p>paragraph</p> 
    <p>paragraph</p> 
    <table><tr><td/></tr></table> 
    <p>paragraph</p> 
    <p>paragraph</p> 
    <p>paragraph</p> 
</modified> 

谢谢。

回答

1

您可以使用下面的样式表:

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

    <xsl:output omit-xml-declaration="yes"/> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="element_1"> 
     <xsl:for-each-group select="*" group-starting-with="h1"> 
      <xsl:result-document href="{concat('File', count(preceding-sibling::h1) + 1, '.xml')}"> 
       <modified> 
        <xsl:apply-templates select="current-group()"/> 
       </modified> 
      </xsl:result-document> 
     </xsl:for-each-group> 
    </xsl:template>  

</xsl:stylesheet> 
+0

这组节点以'h1'并将其输出到一个文件名'文件[否] .xml' –

+0

应该足够使用'的'为第一组产生'File1.xml',为第二组产生'File2.xml',等等。 –

+0

感谢您的回复。 @Joel M. Lamsen,但当我在我的系统中尝试XSL时,我得到了这个错误:致命错误:java.lang.IllegalArgumentException:URI方案不是“文件” ; SystemID:file:/// C:/projects/XSL/XSL_Transformation.xsl;行号:8; Column#:-1 转换过程中出错 net.sf.saxon.trans.XPathException:java.lang.IllegalArgumentException:URI方案不是“文件” – Kepler

相关问题