在java中动态读取xml元素和值
我正在尝试读取XML(不管怎样,我不知道它的结构,bcz我正在读取服务器上的文件),我在这方面搜索了很多。但没有发现任何有用的东西 1> 我想检索XML的节点名,从文件的根开始到文件的结尾,从子节点或子节点的子节点直到没有剩余的子节点或同级节点 2> 在类似的问题中,我发现他们使用标记名来检索该标记的值,所以我想将该节点名传递到该标记中以获取值 是否可以动态地执行此操作。或者必须遵循与前面问题相同的结构,如静态添加标记名以检索值 在java中完成这项工作之后,我想创建可执行的jar,并希望在欢乐中使用它在java中动态读取xml元素和值,java,xml,xml-parsing,Java,Xml,Xml Parsing,我正在尝试读取XML(不管怎样,我不知道它的结构,bcz我正在读取服务器上的文件),我在这方面搜索了很多。但没有发现任何有用的东西 1> 我想检索XML的节点名,从文件的根开始到文件的结尾,从子节点或子节点的子节点直到没有剩余的子节点或同级节点 2> 在类似的问题中,我发现他们使用标记名来检索该标记的值,所以我想将该节点名传递到该标记中以获取值 是否可以动态地执行此操作。或者必须遵循与前面问题相同的结构,如静态添加标记名以检索值 在java中完成这项工作之后,我想创建可执行的jar,并希望在欢乐
编辑 我想找到元素及其值,在第一个条件中,我循环我命名为
masterheader
的arraylist,它包含所有标记名,在第二个循环中,我将从xml中找到节点名,在这两个for循环中,我指定了一个条件,如果两者都匹配,那么它将得到节点名,并在其中存储一个值,单独的表单,因为我想在csv
中转换它
这里,masterheader和childheader是arraylist
。默认情况下,masterheader包含所有标头。我们将在childheader
中添加节点名,如果两者匹配,则在结果字符串中添加值。
例如,masterheader=[员工姓名、员工姓氏、父亲姓名、手机号码、工资]
在childheader=[employeename,mobile,salary]
//这是基于xml解析的
for(i=0;i<masterheader.size();i++)
{
for(j=0;j<childheader.size();j++)
{
if((masterheader[i]).equals(childheader[j]))
{
//get the value of that node, + ","
}
else
{
count++
}
}
if(count==childheader.size()){
//add into result string +null+","
}
}
for(i=0;ipublicstaticvoidmain(String[]args)抛出SAXException、IOException、,
ParserConfiguration异常,TransformerException{
DocumentBuilderFactory docBuilderFactory=DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder=docBuilderFactory.newDocumentBuilder();
documentdocument=docBuilder.parse(新文件(“Document.xml”);
NodeList NodeList=document.getElementsByTagName(“*”);
for(int i=0;i
我认为这将有助于publicstaticvoidmain(String[]args)抛出SAXException、IOException、,
ParserConfiguration异常,TransformerException{
DocumentBuilderFactory docBuilderFactory=DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder=docBuilderFactory.newDocumentBuilder();
documentdocument=docBuilder.parse(新文件(“Document.xml”);
NodeList NodeList=document.getElementsByTagName(“*”);
for(int i=0;i
我认为这将有所帮助您可以为此使用一个StAX解析器
XML示例employees.XML
2.
简
雌鹿
20000
3.
阿尔弗雷德
彭尼沃思
30000
4.
托尼
明显的
40000
42
福
酒吧
15
Java代码
为此,可以使用StAX解析器
XML示例employees.XML
2.
简
雌鹿
20000
3.
阿尔弗雷德
彭尼沃思
30000
4.
托尼
明显的
40000
42
福
酒吧
15
Java代码
您是对的,它将为您提供所有节点值。从开始到结束
,但在检索值时,您也会获得parents标记的值:(,它将所有子值打印为父项的值。很好的尝试,但我想要更好的。您是对的,它将为您提供所有节点值。。从开始到结束
,但在检索值时,您也会获得父项标记的值:(,它将所有子值打印为parent.nice try的值,但我想要更好的。您是否也可以使用main和import语句更新您的答案,因为当我尝试这样做时,我在try{(InputStream=new FileInputStream(“employees.xml”){
行,说将项目合规性和jdk更改为1.7
@yash在主方法中添加后,您正在使用java版本抛出XMLStreamException、FileNotFoundException、IOException
,现在可以了,但有一点混乱。我将编辑这个问题。我用三种方法进行了一些XML解析,一种是using StAX解析器,下一个是使用名为JDOM的外部java库,这很好。在我看来,第三个始终是最好的,使用普通DocumentBuilderFactory和transformer java库,请参考我知道的关于这些可能性的链接。DOM+XPath可能是一个不错的选择,但我建议使用StAX,因为这个问题从“我想从具有给定名称的标记中提取信息“。在这种情况下,DOM只是占用了不必要的大量内存。使用StAX仍然可以做到这一点,但为此@yash需要在问题中添加一些关于xml结构的信息。您是否也可以使用main和import语句更新您的答案,因为当我尝试这样做时,我会得到错误登录try?”{(InputStream=新文件InputStream(“employees.xml”){}
行,说将项目合规性和jdk更改为1.7
@yash在主方法中添加后,您正在使用java版本抛出XMLStreamException、FileNotFoundException、IOException
,现在可以了,但有一点混乱。我将编辑这个问题。我已经用三个
public static void main(String[] args) throws SAXException, IOException,
ParserConfigurationException, TransformerException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File("document.xml"));
NodeList nodeList = document.getElementsByTagName("*");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
// do something with the current element
System.out.println(node.getNodeName());
}
}
}
try (InputStream stream = new FileInputStream("employees.xml")) {
XMLInputFactory inputFactory = XMLInputFactory.newFactory();
inputFactory.setProperty(XMLInputFactory.IS_COALESCING, true);
XMLStreamReader reader = inputFactory.createXMLStreamReader(stream);
while (reader.hasNext()) {
switch (reader.next()) {
case XMLStreamConstants.START_ELEMENT:
System.out.println("Start " + reader.getName());
for (int i = 0, count = reader.getAttributeCount(); i < count; i++) {
System.out.println(reader.getAttributeName(i) + "=" + reader.getAttributeValue(i));
}
break;
case XMLStreamConstants.END_ELEMENT:
System.out.println("End " + reader.getName());
break;
case XMLStreamConstants.CHARACTERS:
case XMLStreamConstants.SPACE:
String text = reader.getText();
if (!text.trim().isEmpty()) {
System.out.println("text: " + text);
}
break;
}
}
}