繁体   English   中英

使用Java更新XML文档

Update XML document using Java

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

在互联网上,我找到了许多有关如何实现此功能的示例,但是在我看来,这些示例都不起作用。 我有一个包含XML数据的字符串,而且我知道结果的XPath应该是什么样子。 例如,我有一个如下所示的xml结构:

   <?xml version="1.0"?>
     <m:parent xmlns:m="http://www.somescheme">
      <doc:header xmlns:doc="http://www.somescheme">
        <doc:documentId>137</doc:documentId>
        <doc:documentDescription>Some Description</doc:documentDescription>  
         <doc:task>
           <doc:id>49</doc:id>
           <doc:name>Some Name</doc:name>
           <doc:description>Some Task Description</doc:description>
           <doc:outcome/>
           <doc:dueDate/>
           <doc:priority>50</doc:priority>
          </doc:task>
        </doc:header>
        <m:otherinfo>234324</m:otherInfo>
      </m:parent>

比如说我需要访问和更新otherInfo,那么XPath应该是“ m:parent / m:otherInfo”,我应该能够读取和设置它。 对于doc:outcome,它将是'm:parent / doc:header / doc:task / doc:outcome'。这是我需要在运行时设置的值。

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
        new InputSource("data.xml"));

    XPath xpath = XPathFactory.newInstance().newXPath();
    NodeList nodes = (NodeList) xpath.evaluate("//m:parent/doc:header/doc:task/doc:outcome", doc,
        XPathConstants.NODESET);

代码应该像上面一样,但是我没有得到结果,

你能指出我想念的东西吗?

此致Max

1 个回复

您必须另外做两件事,才能使用命名空间评估XPATH表达式。

  1. 默认情况下, DocumentBuilderFactory实例不支持名称空间。 因此,您必须调用setNamespaceAware(true)
  2. 创建接口NamespaceContext自己的实现,并将其传递给XPath实例。

这里是一个简单的NamespaceContext实现,它是一个静态内部类。 此处仅实现getNamespaceURI()方法。 有关更多详细信息和替代实现,请参阅此IBM developerWorks文章: 将Java语言NamespaceContext对象与XPath结合使用

static class MyNamespaceContext implements NamespaceContext {
  @Override
  public String getNamespaceURI(String prefix) {
    if(prefix == null) {
      throw new IllegalArgumentException();
    } else if(prefix.equals(XMLConstants.DEFAULT_NS_PREFIX)) {
      return XMLConstants.NULL_NS_URI;
    } else if(prefix.equals(XMLConstants.XML_NS_PREFIX)) {
      return XMLConstants.XML_NS_URI;
    } else if(prefix.equals(XMLConstants.XMLNS_ATTRIBUTE)) {
      return XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
    } else if(prefix.equals("m")) {
      return "http://www.somescheme";
    } else if(prefix.equals("doc")) {
      return "http://www.somescheme";
    } else {
      return XMLConstants.NULL_NS_URI;
    }
  }

  @Override
  public String getPrefix(String namespaceURI) {
    throw new UnsupportedOperationException();
  }

  @Override
  public Iterator getPrefixes(String namespaceURI) {
    throw new UnsupportedOperationException();
  }
}

这是DocumentBuilderFactory的一部分:

DocumentBuilderFactory documentBuilderFactory = 
    DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
Document doc = documentBuilderFactory.newDocumentBuilder().parse(
    new InputSource("data.xml"));

XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setNamespaceContext(new MyNamespaceContext());
NodeList nodes = (NodeList) xpath.evaluate(
    "//m:parent/doc:header/doc:task/doc:outcome", doc,
    XPathConstants.NODESET);

这两个名称空间前缀实际上链接到相同的名称空间URI。 实际上,您只能在XPATH表达式中使用一个前缀,例如"//doc:parent/doc:header/doc:task/doc:outcome"并且无需在NamespaceContext实现中声明两者。

1 如何使用Ant更新XML文档

我的目标是简单地更新简单的站点地图xml文档中的“lastmod”节点: 我想在部署ant脚本中执行此操作,因此我使用Ant任务XMLTask 。 这是我的蚂蚁目标: 不幸的是,我的xpath无法匹配任何东西: 我也尝试了以下xpath查询,没有运气: 但是我发 ...

2 使用xpath更新xml文档

您好,这是我的xml文档: 我想使用xpath和netbeans将jbeil中“ jojo”餐厅的评分从4.3 / 5更新为4.5 / 5,请帮助, 该代码给出了等级, 而且我只想更新名称为“ jojo”的jbeil餐厅的评分,请提供帮助 ...

3 使用参数更新 XML 文档

我有一个包含 20 多个元素及其属性的文档。 我正在尝试更新属性值并尝试使用 linq 库来获取元素并更新其值。 我无法使用以下逻辑从我的 XML 文档中找到元素。 VB.Net 代码 XML 文档: 使用上面的代码,我的 elmnt 值在第 4 行为 NULL,这导致第 5 行出现错 ...

5 XML文档未在Java中更新

我确实尝试到处找到解决方案,但是没有任何效果,所以我会在这里尝试运气。 我正在尝试实现一个图书馆程序,并且需要更改保存图书信息的xml文件。 但是我在实际更新文件时遇到了麻烦。 例如,这是我的XML代码调用books.xml(请忽略描述,我只是在写东西): 现在,这里是我的Java代码(没有G ...

2020-12-30 13:22:27 0 38   java/ xml
6 使用Java创建XML文档

我已经看到了许多程序,在这些程序中可以使用带有指定字段的Java创建XML文档。 我还没有碰到一个让用户决定rootElement和childEelement的名称的地方。 有人知道该怎么做吗? ...

7 使用Java解析xml文档

我有一个.xml文件,其值像这样 用于读取此xml文件,我正在使用以下代码。 它工作正常。 但是我的问题是,如果我的.xml文件具有多个&lt;CRAWL&gt;节点,那么我该如何解析两者。 读取&lt;CRAWL&gt; &lt;/CRAWL&gt;的值后,我想读取下 ...

8 尝试使用 Java 和 Xpath 更新 XML 文档中任何选定节点的值

我开发了 GUI 工具,将 XML 文档显示为可编辑的 JTree,用户可以在 JTree 中选择一个节点并尝试更改 XML 文档中的实际节点值。 我遇到的问题是构建尝试实际更新的正确 Xpath 查询。 这是 JTree 的 GUI,显示哪个元素被选中并应该被编辑: 它是一个非常大的 X ...

9 如何使用XML文档更新HTML文本? [关闭]

我有一些框需要显示电影的图像,每个框下面都有一个小框,需要显示电影的名称。 (请参见下面的图片链接) 我需要创建一个功能,该功能允许用户使用XML文件和图像路径使用新的电影图像和电影名称更新图像和文本框。 有人可以向我解释所有这些工作原理吗? 我对Web开发非常陌生,这对我来说毫 ...

10 使用Python或shell脚本更新XML文档

我有一个XML文件,用作具有以下结构的动态面板的索引: 我的面板使用此文件作为构建索引。 当我更新服务器上的文件时,我需要手动更新filedate元素,...但文件有80行,这很糟糕。 脚本是否有办法完成这项工作? 顺序是: 逐行解析文件 从&lt;file& ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM