2017-04-06 78 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'。 –