Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中动态读取xml元素和值_Java_Xml_Xml Parsing - Fatal编程技术网

在java中动态读取xml元素和值

在java中动态读取xml元素和值,java,xml,xml-parsing,Java,Xml,Xml Parsing,我正在尝试读取XML(不管怎样,我不知道它的结构,bcz我正在读取服务器上的文件),我在这方面搜索了很多。但没有发现任何有用的东西 1> 我想检索XML的节点名,从文件的根开始到文件的结尾,从子节点或子节点的子节点直到没有剩余的子节点或同级节点 2> 在类似的问题中,我发现他们使用标记名来检索该标记的值,所以我想将该节点名传递到该标记中以获取值 是否可以动态地执行此操作。或者必须遵循与前面问题相同的结构,如静态添加标记名以检索值 在java中完成这项工作之后,我想创建可执行的jar,并希望在欢乐

我正在尝试读取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;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
我认为这将有助于

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;
        }
    }
}