首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用节点的名称和特定的属性值从xml文件中选择特定的节点?

如何使用节点的名称和特定的属性值从xml文件中选择特定的节点?
EN

Stack Overflow用户
提问于 2015-05-21 12:25:41
回答 3查看 974关注 0票数 1

我有一个MySQL DB,在该表中我创建了一个带有长文本列的表,其中我将xml文件作为字符串存储,因此我询问是否可以使用它们的名称和特定的属性值获取节点!下面是我处理的xml示例:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<HWData>
  <Header time="2013-05-29T13:39:34" uploaded="true" version="1.0" />
  <NE vendorName="Nokia Siemens Networks" NEId="WBTS-431">
    <EQHO vendorName="Nokia Siemens Networks" equipmentHolderId="173" >
        <UNIT vendorName="N" unitId="16" />
        <UNIT vendorName="NOKIA SIEMENS NETWORKS" unitId="225" />
    </EQHO>
    <EQHO vendorName="NSN" equipmentHolderId="40192" >
        <UNIT vendorName="AR" unitId="40267" />
    </EQHO>
  </NE>
  <NE vendorName="Nokia Siemens Networks" NEId="WBTS-261">
    <EQHO vendorName="Nokia Siemens Networks" equipmentHolderId="132" >
      <EQHO vendorName="Nokia Siemens Networks" equipmentHolderId="132-1">
        <UNIT vendorName="NN" unitId="1621" />
      </EQHO>
    </EQHO>
  </NE>
</HWData>

可以使用"EQHO“(节点名称)和”NE-RNC-4/DN:NE 4204/EQHO-173“(属性MOID的值)来使用SQL query!:

代码语言:javascript
复制
   <NE vendorName="Nokia Siemens Networks" NEId="WBTS-261">
    <EQHO vendorName="Nokia Siemens Networks" equipmentHolderId="132" >
      <EQHO vendorName="Nokia Siemens Networks" equipmentHolderId="132-1">
        <UNIT vendorName="NN" unitId="1621" />
      </EQHO>
    </EQHO>
   </NE>

能不能有人给我一个正确的方法来实现that..any,其他的建议或例子将不胜感激。提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-24 00:51:23

我使用这种方法将节点作为字符串来获取,它运行得很好:

代码语言:javascript
复制
public static String NodeToString(String file,String moid) throws   SAXException, IOException, ParserConfigurationException{
    String stringNode="";


    InputStream in = new ByteArrayInputStream(file.getBytes("ISO-8859-1"));
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);
    NodeList nodeList = doc.getElementsByTagName("*");
    for (int i = 0; i < nodeList.getLength(); i++) {
        if(nodeList.item(i) instanceof Element && ((Element)nodeList.item(i)).getAttribute("MOID").equalsIgnoreCase(moid)){

    try
    {

      // Set up the output transformer
      TransformerFactory transfac = TransformerFactory.newInstance();
      Transformer trans = transfac.newTransformer();
      trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
      trans.setOutputProperty(OutputKeys.INDENT, "yes");

      // Print the DOM node

      StringWriter sw = new StringWriter();
      StreamResult result = new StreamResult(sw);
      DOMSource source = new DOMSource(nodeList.item(i));
      trans.transform(source, result);
      stringNode = sw.toString();

      //System.out.println(xmlString);
    }
    catch (TransformerException e)
    {
      e.printStackTrace();
    }       


        }
}
    return stringNode;

} 
票数 1
EN

Stack Overflow用户

发布于 2015-05-23 12:58:24

MySQL在查询XML数据时的功能非常有限。ExtractValue()函数可以用于从XML文档中获取节点/属性值,但不能返回子树。

最好的选择可能是在您选择的主机语言中使用xpath。根据有关示例获取特定节点的名称和特定属性值的Xpath如下所示:

代码语言:javascript
复制
//EQHO[@MOID="NE-RNC-4/DN:NE-WBTS-4204/EQHO-173"]

上面的xpath返回XML中的所有<EQHO>元素,这些元素具有MOID属性值等于"NE-RNC-4/DN:NE-WBTS-4204/EQHO-173"。如果愿意,您甚至可以在不知道属性名称的情况下实现相同的目标,方法是用@MOID替换@*

票数 1
EN

Stack Overflow用户

发布于 2015-05-21 12:34:25

您可以使用xpath。

代码语言:javascript
复制
/HWData/NE/EQHO[@MOID="NE-RNC-4/DN:NE-WBTS-4204/EQHO-173"]

示例java代码

代码语言:javascript
复制
  InputSource is = new InputSource(new StringReader(xml)) ;
  Document doc = builder.parse(is);
  XPathFactory xPathfactory = XPathFactory.newInstance();
  XPath xpath = xPathfactory.newXPath();
  XPathExpression expr = xpath.compile("/HWData/NE/EQHO[@MOID=\"NE-RNC-4/DN:NE-WBTS-4204/EQHO-173\"]");
  NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
  for (int i = 0; i < nl.getLength(); i++)
  {
    Node node =  nl.item(i);
    System.out.println(nl.item(i).getNodeName());
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30373731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档