2013-10-14 3 views
1

У меня очень ограниченное знание XSLT, и то, что я преследую, возможно, очень просто. Использование XSLT 1.0XSLT для фильтрации XML для создания более короткого дерева XML

У меня есть XML, как это ... (сокращенную сделать легко)

<?xml version="1.0" encoding="UTF-8"?> 
<Report schema="1.0"> 
    <Item name="cabinet" id="1" /> 
    <Item name="cabinet" id="2" /> 
    <Item name="cabinet" id="3" /> 
    <DocumentProperties> 
     <PageProperties name="Page 1" pagenum="1" /> 
     <Paths> 
     <Data>C:\Data\</Data> 
     <Library>C:\Library\</Library> 
     <Table>C:\Table\</Table> 
     <Picture>C:\Bitmap\</Picture> 
     <Report>C:\Report\</Report> 
     <Template>C:\Template\</Template> 
     <Backup>C:\Backup\</Backup> 
     <Program>C:\</Program> 
     </Paths> 
     <Application> 
     <Product>CabPro</Product> 
     <Family>Software</Family> 
     <Version>8.0.61.2700</Version> 
     <Build>2013.10.4.0</Build> 
     <Desc /> 
     <Company>Q1</Company> 
     <Account>QSystems Pty Ltd</Account> 
     </Application> 
    </DocumentProperties> 
</Report> 

мне нужно прочитать большой объемистый XML, который был создан, и отфильтровать отходы просто иметь требуемое дерево информации.

, например ...

<?xml version="1.0"?> 
<Report schema="1.0"> 
    <Paths> 
     <Data>C:\Data\</Data> 
     <Library>C:\Library\</Library> 
     <Table>C:\Table\</Table> 
     <Picture>C:\Bitmap\</Picture> 
     <Report>C:\Report\</Report> 
     <Template>C:\Template\</Template> 
     <Backup>C:\Backup\</Backup> 
     <Program>C:\</Program> 
    </Paths> 
</Report> 

Как вы спросите XSLT для обработки XML в XML таким образом, чтобы, как его происхождение дерева, но вы можете удалить ненужные части.

ответ

2

Я бы сделал что-то похожее на ColinE, но эта версия не снизит атрибуты.

Я думаю об этой проблеме немного по-другому. Вместо того, чтобы указывать, какие элементы удалить, укажите часть, которую мы хотим сохранить (DocumentProperties/Paths).

XML Input

<Report schema="1.0"> 
    <Item name="cabinet" id="1"/> 
    <Item name="cabinet" id="2"/> 
    <Item name="cabinet" id="3"/> 
    <DocumentProperties> 
     <PageProperties name="Page 1" pagenum="1"/> 
     <Paths> 
      <Data>C:\Data\</Data> 
      <Library>C:\Library\</Library> 
      <Table>C:\Table\</Table> 
      <Picture>C:\Bitmap\</Picture> 
      <Report>C:\Report\</Report> 
      <Template>C:\Template\</Template> 
      <Backup>C:\Backup\</Backup> 
      <Program>C:\</Program> 
     </Paths> 
     <Application> 
      <Product>CabPro</Product> 
      <Family>Software</Family> 
      <Version>8.0.61.2700</Version> 
      <Build>2013.10.4.0</Build> 
      <Desc/> 
      <Company>Q1</Company> 
      <Account>QSystems Pty Ltd</Account> 
     </Application> 
    </DocumentProperties> 
</Report> 

XSLT 1,0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="/*"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|DocumentProperties/Paths"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

XML Output

<Report schema="1.0"> 
    <Paths> 
     <Data>C:\Data\</Data> 
     <Library>C:\Library\</Library> 
     <Table>C:\Table\</Table> 
     <Picture>C:\Bitmap\</Picture> 
     <Report>C:\Report\</Report> 
     <Template>C:\Template\</Template> 
     <Backup>C:\Backup\</Backup> 
     <Program>C:\</Program> 
    </Paths> 
</Report> 
+0

Благодаря Даниэль, я считаю, что попал в точку голова! :) –

Смежные вопросы