Java 从/分隔的字符串创建XML
下面是一个映射元素 我需要从中创建一个xsltJava 从/分隔的字符串创建XML,java,list,compare,Java,List,Compare,下面是一个映射元素 我需要从中创建一个xslt { /output1/output1/output1/output13=/input12/bunny, /output1/output1/output1/output14=/input12/no, /output1/output1/output13/output12=/input12/ok, /output1/output1/output13/output16=/input12/honey
{ /output1/output1/output1/output13=/input12/bunny,
/output1/output1/output1/output14=/input12/no,
/output1/output1/output13/output12=/input12/ok,
/output1/output1/output13/output16=/input12/honey
}
如何将关键元素的每个元素与下一个关键元素的每个元素进行比较
mig封装
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Attr;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
公共类创建XSLT{
public static final String xmlFilePath = "D:/xmlfile.xml";
public void createXSLT(ArrayList<String> SourceValues,ArrayList<String> SourceTypes,ArrayList<String> TargetValues,ArrayList<String> TargetTypes,ArrayList<String> Transform)
{
try {
Map<String, String> yourMap = new HashMap<String, String>();
for(int x=0;x<TargetValues.size();x++)
{
yourMap.put(TargetValues.get(x),SourceValues.get(x));
}
Map<String, String> sortedMap = new TreeMap<String, String>(yourMap);
System.out.println(sortedMap);
Set<Entry<String, String>> entires =sortedMap.entrySet();
Set<String> keyset = sortedMap.keySet();
System.out.println(keyset);
DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder();
Document document = documentBuilder.newDocument();
Element root = document.createElement("xsl:stylesheet");
document.appendChild(root);
Element root1 = document.createElement("xsl:template");
root.appendChild(root1);
Attr attr = document.createAttribute("match");
attr.setValue("/");
root1.setAttributeNode(attr);
Element empDiffNxt = null;
Element empDiff = null;
int nodeLength = keyset.size();
System.out.println("TARGET sIZE: " + nodeLength);
for(String key : keyset)
{
ArrayList<String> check = new ArrayList<String>();
check.add(key);
String[] Tg = key.split("/");
for (int m=1; m< Tg.length; m++)
{
if( m == 1 )
{
empDiffNxt = document.createElement(Tg[m]);
root1.appendChild(empDiffNxt);
}
else
{
empDiff = document.createElement(Tg[m]);
empDiffNxt.appendChild(empDiff);
empDiffNxt= empDiff;
}
}
Element emp1 = document.createElement("xsl:value-of");
empDiffNxt.appendChild(emp1);
Attr attr1 = document.createAttribute("select");
attr1.setValue(sortedMap.get(key));
emp1.setAttributeNode(attr1);
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
StreamResult streamResult = new StreamResult(new File(xmlFilePath));
transformer.transform(domSource, streamResult);
System.out.println("Done creating XML File");
}
catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
}
}
及
在列表中,输入源值
surce值和目标值具有链接..表示源的第一个值与目标的第一个值连接..源的第二个值与目标的第二个值连接
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xsl:stylesheet><xsl:template match="/"><output1><output1><output1><output13><xsl:value-of select="/input12/bunny"/></output13></output1></output1></output1><output1><output1><output1><output14><xsl:value-of select="/input12/no"/></output14></output1></output1></output1><output1><output1><output13><output12><xsl:value-of select="/input12/ok"/><xsl:value-of select="/input12/honey"/></output12></output13></output1></output1></xsl:template></xsl:stylesheet>
这是正在生成的
但我想要的是:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsl:stylesheet>
<xsl:template match="/">
<output1>
<output1>
<output1>
<output13>
<xsl:value-of select="/input12/bunny"/>
</output13>
<output14>
<xsl:value-of select="/input12/no"/>
</output14>
</output1>
<output13>
<output12>
<xsl:value-of select="/input12/ok"/>
</output12>
<output16>
<xsl:value-of select="/input12/honey"/>
</output16>
</output13>
</output1>
</output1>
似乎您的键和值都是字符串。比较的确切含义是什么?您想按键排序,还是要在映射上执行什么操作?我已经对映射进行了排序。现在我想创建xml标记。由于第一个output1相同,将生成一个output1标记,接下来在这个内部,将生成另一个output1,因为所有输出都相同,然后生成一个output1ut1和output13..在输出1..内部,它将是output13和output14@proton我认为,如果您为给定字符串添加结果XML的外观,这将有助于我们所有人。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xsl:stylesheet><xsl:template match="/"><output1><output1><output1><output13><xsl:value-of select="/input12/bunny"/></output13></output1></output1></output1><output1><output1><output1><output14><xsl:value-of select="/input12/no"/></output14></output1></output1></output1><output1><output1><output13><output12><xsl:value-of select="/input12/ok"/><xsl:value-of select="/input12/honey"/></output12></output13></output1></output1></xsl:template></xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsl:stylesheet>
<xsl:template match="/">
<output1>
<output1>
<output1>
<output13>
<xsl:value-of select="/input12/bunny"/>
</output13>
<output14>
<xsl:value-of select="/input12/no"/>
</output14>
</output1>
<output13>
<output12>
<xsl:value-of select="/input12/ok"/>
</output12>
<output16>
<xsl:value-of select="/input12/honey"/>
</output16>
</output13>
</output1>
</output1>