以xml格式访问数据

时间:2017-09-12 12:32:47

标签: java xml

我收到字符串格式的xml。是否有任何库可以搜索字符串中的元素?

 <Version value="0"/>
    <IssueDate>2017-12-15</IssueDate>
    <Locale>en_US</Locale>
    <RecipientAddress>
        <Category>Primary</Category>
        <SubCategory>0</SubCategory>
        <Name>Vitsi</Name>
        <Attention>Stowell Group Llc.</Attention>
        <AddressLine1>511 6th St</AddressLine1>
        <City>Lake Oswego</City>
        <Country>United States</Country>
        <PresentationValue>Lake Oswego OR 97034-2903</PresentationValue>
        <State>OR</State>
        <ZIPCode>97034</ZIPCode>
        <ZIP4>2903</ZIP4>
    </RecipientAddress>
    <RecipientAddress>
        <Category>Additional</Category>
        <SubCategory>1</SubCategory>
        <Name>Vitsi</Name>
        <AddressLine1>Po Box 957</AddressLine1>
        <City>Lake Oswego</City>
        <Country>United States</Country>
        <PresentationValue>Lake Oswego OR 97034-0104</PresentationValue>
        <State>OR</State>
        <ZIPCode>97034</ZIPCode>
        <ZIP4>0104</ZIP4>
    </RecipientAddress>
    <SenderName>TMO</SenderName>
    <SenderId>IL</SenderId>
    <SenderAddress>
        <Name>T-mobile</Name>
        <AddressLine1>Po Box 790047</AddressLine1>
        <City>St. Louis</City>
        <PresentationValue>ST. LOUIS MO 63179-0047</PresentationValue>
        <State>MO</State>
        <ZIPCode>63179</ZIPCode>
.
.
.
.

我想访问元素RecipientAddress,这是一个列表。有没有图书馆可以做到这一点?请注意,我收到的是一个字符串。这是一张发票,需要处理很多,所以表现很重要

3 个答案:

答案 0 :(得分:1)

以下选项可用:

  1. 使用JAXB将xml字符串转换为java对象。
  2. 在string方法中使用.indexOf()来检索xml的特定部分。
  3. 使用正则表达式检索xml的特定部分。
  4. 用于从xml解析和提取的SAX / DOM / STAX解析器。
  5. 用于从xml中获取特定值的Xpath。

答案 1 :(得分:0)

有许多预先实现的api可用于将xml转换为java对象。

请查看Apache的xerces

如果您想要仅提取指定值,请将整数放入字符串并使用indexOf("string")

答案 2 :(得分:0)

您可以使用XPATH。 Java内置了对XML查询的支持,没有任何第三方库,

代码片段是,

String xmlInputStr = "<YOUR_XML_STRING_INPUT>"

String xpathExpressionStr = "<XPATH_EXPRESSION_STRING>"

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(xmlInputStr);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(xpathExpressionStr);

您可以编写自己的表达式字符串以进行查询。典型的例子

"/RecipientAddress/Category"

根据表达式评估xml以检索节点列表。

NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

迭代节点,

for (int i = 0; i < nodes.getLength(); i++) {
   Node nNode = nodes.item(i);
   ...
}