两个Xmls输入,一个带XSL变换的输出

时间:2017-05-17 13:01:26

标签: java xml xslt

我试图编写一个基本上需要从一个xml中获取一些值而从另一个中获取其他值并输出XML的XSL。我已经在网上搜索了一些解决方案,我发现我已将此<xsl:variable name='file' select="'file:///C:/Users/file.xml'">放入我的输入XML中,该输入XML应该加载另一个XML并将其存储到变量中但是从此我不知道如何获取文档的标签值。

file.xml 就是这个

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<silosMediaObject>
    <canBeDeleted>-1</canBeDeleted>
    <checkedOut>-1</checkedOut>
    <checkedOutBy>-1</checkedOutBy>
    <deleted>-1</deleted>
    <description>Traccia audio migrata da ASCN</description>
    <externalResourcePath>TEST/ASCN/lq/3763_2015-05-05.mp3</externalResourcePath>
    <fileName>3763_2015-05-05.mp3</fileName>
    <framesPerSecond>-1</framesPerSecond>
    <hasScheduledIngestion>false</hasScheduledIngestion>
    <isArchived>-1</isArchived>
    <isArchiving>-1</isArchiving>
    <isAvailable>-1</isAvailable>
    <isEncoding>-1</isEncoding>
    <isRestoring>-1</isRestoring>
    <isVerified>-1</isVerified>
    <mediaObjectId>-1</mediaObjectId>
    <mediaTypeId>-1</mediaTypeId>
    <mosId>4347</mosId>
    <resourceIsExternal>-1</resourceIsExternal>
    <sourceMediaObjectId>-1</sourceMediaObjectId>
    <state>AVAILABLE</state>
    <versionLinkId>-1</versionLinkId>
</silosMediaObject>

我用来转换文件的Java类就是这个:

public class TestMain {
 public static void main(String[] args) throws IOException, URISyntaxException, TransformerException {
        TransformerFactory factory = TransformerFactory.newInstance();
        Source xslt = new StreamSource(new File("C:\\Users\\xmltemplate_transformer.xsl"));
        Transformer transformer = factory.newTransformer(xslt);

        Source text = new StreamSource(new File("C:\\Users\\tobe_transformed.xml"));
        transformer.transform(text, new StreamResult(new File("C:\\Users\\out.xml")));
    }

}

1 个答案:

答案 0 :(得分:0)

  

我已经在网上搜索了一些解决方案,我发现我已将此<xsl:variable name='file' select="'file:///C:/Users/file.xml'">放入我的输入XML中,该XML应该加载另一个XML并将其存储到变量中

我不知道你有什么想法,但你很困惑。 select值被解释为XPath表达式。您的字符串文字包含具有file方案的URL。就XPath或XSLT而言,它只是一个字符串。有人可能会采取进一步措施来解析该URL指定的文件,但您所提供的文件没有这样的效果。

特别是,你可能想要这样做:

<xsl:variable name='file' select="document('file:///C:/Users/file.xml')"/>

document()函数是实际导​​致读取和解析指定文件的秘诀(如果可能的话);当如图所示使用时,其结果是包含结果文档的根节点的节点集,或者如果无法解析指定文档并且处理器选择不发出错误信号,则为空节点集。

注意:当您说我将xsl:variable&#34;放在我的输入XML&#34;中时,我认为您的意思是在(基于XML的)XSL样式表中的适当位置。如果你的意思是你已经将它放在你正在处理的不同XML数据文件中,那么除了在输入树中包含它之外,它将没有直接影响。

  

但是由此我不知道如何获取文档的标签值。

成功解析文件后,您可以在XSLT期望表达式求值为节点集的任何位置使用结果节点集。特别是,在其范围内,您可以使用对已定义的变量($file)的引用作为XPath函数的参数,或作为整个表达式,例如select表达式一个xsl:apply-templates。既然你没有说出你想要对内容做什么,我自己就不能再具体了。看看你能做什么,如果你不能弄清楚细节,那么这可能是一个适合新问题的主题。