当前位置: 首页 > 面试题库 >

如何将子元素从XML提取到Java中的字符串?

巢承安
2023-03-14
问题内容

如果我有一个XML文档,例如

<root>   
   <element1>
        <child attr1="blah">
           <child2>blahblah</child2>
        <child>   
   </element1> 
</root>

我想获取带有第一个子元素的XML字符串。我的输出字符串是

<element1>
    <child attr1="blah">
       <child2>blahblah</child2>
    <child>
</element1>

有很多方法,想看看一些想法。我一直在尝试使用Java XML API,但尚不清楚有没有很好的方法来做到这一点。

谢谢


问题答案:

没错,使用标准XML API并不是一种好方法-这是一个示例(可能是bug缠身;它可以运行,但是我很久以前就写了)。

import javax.xml.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import java.io.*;

public class Proc
{
    html" target="_blank">public static void main(String[] args) throws Exception
    {
        //Parse the input document
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(new File("in.xml"));

        //Set up the transformer to write the output string
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer();
        transformer.setOutputProperty("indent", "yes");
        StringWriter sw = new StringWriter();
        StreamResult result = new StreamResult(sw);

        //Find the first child node - this could be done with xpath as well
        NodeList nl = doc.getDocumentElement().getChildNodes();
        DOMSource source = null;
        for(int x = 0;x < nl.getLength();x++)
        {
            Node e = nl.item(x);
            if(e instanceof Element)
            {
                source = new DOMSource(e);
                break;
            }
        }

        //Do the transformation and output
        transformer.transform(source, result);
        System.out.println(sw.toString());
    }
}

似乎您可以仅使用doc.getDocumentElement()。getFirstChild()来获得第一个孩子,但是问题是如果根元素和子元素之间存在任何空格,则会在树,您将获得该节点,而不是实际的元素节点。该程序的输出为:

D:\home\tmp\xml>java Proc
<?xml version="1.0" encoding="UTF-8"?>
<element1>
        <child attr1="blah">
           <child2>blahblah</child2>
       </child>
   </element1>

我认为您可以在不需要的情况下取消xml版本字符串,但是我不确定。如果可能的话,我可能会尝试使用第三方XML库。



 类似资料:
  • 这是我的XML文件 我只想从xml中删除第二个选项 我的java代码从我的选项元素中删除所有选项。使用

  • 我想从url字符串中提取子字符串。这是url: 我想开始从id中提取= 直到破折号(-),然后提取剩余的子字符串 请注意,确切的域不是上面的域,这只是一个示例。 有什么想法吗?我非常感谢你的帮助。谢谢 更新: 这就是我到目前为止所做的: 但它只是公开了/pi。

  • 比起Ruby、Capybara和SitePrism,我更熟悉Java和Selenium,所以如果这个问题太多,我深表歉意。 Selenium有一个非常有用的类来管理Select标签,Selenium::WebDriver::Support::Select,它可以通过传递代表select的Selenium Element(Selenium::WebDriver::Element)来创建。我想得到一个

  • 我正在尝试使用以下结构单击element: 但是,这将抛出。 我当前正在使用:刮取(父)元素列表。这标识了正确的元素列表(按预期工作)。有了列表后,我应用以下函数: 使用: 而且 但是,这将触发。 我对此进行了几个小时的研究,基于几个帖子,我添加了“。”在两个斜杠之前,这表示相对于父级(而不是相对于整个DOM)。 如果我移除这个点,我总是得到页面上的第一个元素--而不是列表中每个父元素的子元素。

  • 问题内容: 我有一个字符串(基本上是遵循命名约定的文件名) 我想在第一个(即一个点)之前提取子字符串 在java doc api中,我似乎找不到在String中执行此操作的方法。 我想念什么吗?怎么做? 问题答案: 看看和。 确保检查的-1 。

  • 我有一个字符串。我想从中提取。为此,我正在努力 但是在输出上我得到了。 我怎样才能走出地狱世界。 谢谢