我有一个XML文件,需要基于Xpath变量上的匹配(Contains)进行拆分。使用XSLT将多个文件拆分为xml使用Java
`<Apps>
<App>
<AppID>49O</AppID>
<Type>MP Pay</Type>
</App>
<App>
<AppID>715</AppID>
<Type>DP Pay</Type>
</App>
<App>
<AppID>716</AppID>
<Type>MP Pay</Type>
</App>
<App>
<AppID>725</AppID>
<Type>CP Pay</Type>
</App>
<App>
<AppID>728</AppID>
<Type>MP Pay</Type>
</App>
<App>
<AppID>728</AppID>
<Type>CP Pay</Type>
</App>
</Apps>`
所以条件分裂XML是 1.应用程序/应用/类型/文本() - >包含 'MP' 2.应用程序/应用/类型/文本() - >包含 'DP'
以下是在预期输出:
包含类型为 'MP' 应该是在一个文件中的所有应用程序的节点 - > MP.xml。包含类型为 'DP'
<Apps> <App> <AppID>49O</AppID> <Type>MP Pay</Type> </App> <App> <AppID>716</AppID> <Type>MP Pay</Type> </App> <App> <AppID>728</AppID> <Type>MP Pay</Type> </App> </Apps>
所有App节点应该是在一个文件 - > DP.xml。
<Apps> <App> <AppID>715</AppID> <Type>DP Pay</Type> </App> </Apps>
所有App节点未能匹配上述2个条件应在文件 - > Mismatched.xml。
<Apps> <App> <AppID>715</AppID> <Type>CP Pay</Type> </App> <App> <AppID>725</AppID> <Type>CP Pay</Type> </App> </Apps>
的Java代码
public class Splitter {
public static void transform(String sourcePath, String xsltPath,
String resultDir) {
TransformerFactory tFactory = TransformerFactory.newInstance();
try {
Transformer transformer = tFactory.newTransformer(new StreamSource(
new File(xsltPath)));
transformer.transform(new StreamSource(new File(sourcePath)),
new StreamResult(new File(resultDir)));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// Set saxon as transformer.
System.setProperty("javax.xml.transform.TransformerFactory",
"net.sf.saxon.TransformerFactoryImpl");
String inputFilepath = "resources\\InputFile.xml";
String transformXsltPath = "resources\\Transform.xslt";
String outputDir = "D://Tmp//";
transform(inputFilepath, transformXsltPath, outputDir);
System.out.println("Completed");
}
}
你可以发布你的java代码呢?你使用撒克逊,普通的Java(与xslt 2.0)? 谢谢, 斯蒂芬 –
是的,我正在使用撒克逊。在我的问题本身中添加了java代码 –