2017-04-06 79 views
0

我試圖讀取文件路徑在XML中的文件,然後將該文件中的內容寫入另一個新的xml,只使用xslt假設所有文件都在相同夾。使用XSLT讀取和寫入XML文件

要求是,打開並讀取input.xml並在「filepath」標籤中找到文件路徑,然後打開並讀取位於「filepath」中的AddressBook01.xml,然後閱讀AddressBook01中的「Name」標籤.xml文件並將它們寫入文件,如Name01.xml。

基本上如果足以知道如何使用XSLT讀取和寫入文件。

這可能嗎?我是新來的,任何幫助都非常感謝。在input.xml中

輸入XML

?xml version="1.0" encoding="UTF-8"?> 
<AddressFiles> 
    <AddressFile> 
     <name>AdressBook01</name> 
     <filepath>AddressBook01.xml</filepath> 
    </AddressFile> 
<AddressFiles> 

含量的AddressBook01.xml

?xml version="1.0" encoding="UTF-8"?> 
<ContactDetails> 
    <Contact> 
     <Name>Tom</Name> 
     <Address>Toms Address</Address> 
    </Contact> 
    <Contact> 
     <Name>Peter</Name> 
     <Address>Peters Address</Address> 
    </Contact> 
</ContactDetails> 

在Names01.xml 預期輸出

?xml version="1.0" encoding="UTF-8"?> 
<Name>Tom</Name> 
<Name>Peter</Name> 

回答

0

使用XSLT 2.0處理器,您可以使用doc函數讀入該文件,並使用xsl:result-document(例如)創建結果文檔。

<xsl:template match="AddressFile"> 
    <xsl:result-document href="Names{replace(name, '[^0-9]+', '')}.xml"> 
    <xsl:copy-of select="doc(filepath)//Contact/Name"/> 
    </xsl:result-document> 
</xsl:template> 

注意您的預期的輸出缺少含有Name元件一個根元素,所以它不是一個良好的XML文檔。可以創建結果格式並且我的建議可以這樣做,但在大多數情況下,最好創建格式良好的XML文檔,否則使用XML工具讀取/處理創建的文件的方式很少。

+0

如果我使用XSLT 1.0,該怎麼辦?我怎麼能做同樣的事情呢? –

+0

您使用哪種XSLT 1.0處理器?有些支持http://exslt.org/exsl/elements/document/index.html來創建一個結果文檔,在文檔中讀取可以用'document(filepath)// Contact/Name'來代替'doc(文件路徑)//聯繫/ Name'。 –