我试图编写一个基本上需要从一个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")));
}
}
答案 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
。既然你没有说出你想要对内容做什么,我自己就不能再具体了。看看你能做什么,如果你不能弄清楚细节,那么这可能是一个适合新问题的主题。