簡體   English   中英

Java DOM解析器XML

[英]Java DOM Parser XML

我需要從以下XML文件的<Item Name="CanonicalSmiles">提取屬性值(顯示了一部分)?

我嘗試了getElementsByTagName("Item").item(12).getTextContent()); 但是對於不同的<DocSum> item(i)是不同的(即並非總是12個!)

我該怎么做呢??

  <?xml version="1.0"?>
    <!DOCTYPE eSummaryResult PUBLIC "-//NLM//DTD eSummaryResult, 29 October 2004//EN" "http://www.ncbi.nlm.nih.gov/entrez/query/DTD/eSummary_041029.dtd">
    <eSummaryResult>
    <DocSum>
        <Id>53359352</Id>
        <Item Name="CID" Type="Integer">53359352</Item>
        <Item Name="SourceNameList" Type="List"></Item>
        <Item Name="SourceIDList" Type="List"></Item>
        <Item Name="SourceCategoryList" Type="List">
            <Item Name="string" Type="String">Journal Publishers</Item>
        </Item>
        <Item Name="CreateDate" Type="Date">2011/09/19 00:00</Item>
        <Item Name="SynonymList" Type="List"></Item>
        <Item Name="MeSHHeadingList" Type="List"></Item>
        <Item Name="MeSHTermList" Type="List"></Item>
        <Item Name="PharmActionList" Type="List"></Item>
        <Item Name="CommentList" Type="List"></Item>
        <Item Name="IUPACName" Type="String">2-hydroxy-6-[2-(4-hydroxyphenyl)-2-oxoethyl]benzoic acid</Item>
        <Item Name="CanonicalSmiles" Type="String">C1=CC(=C(C(=C1)O)C(=O)O)CC(=O)C2=CC=C(C=C2)O</Item>
        <Item Name="RotatableBondCount" Type="Integer">4</Item>
        <Item Name="MolecularFormula" Type="String">C15H12O5</Item>
        <Item Name="MolecularWeight" Type="String">272.252780</Item>
        <Item Name="TotalFormalCharge" Type="Integer">0</Item>
        <Item Name="XLogP" Type="String"></Item>
        <Item Name="HydrogenBondDonorCount" Type="Integer">3</Item>
        <Item Name="HydrogenBondAcceptorCount" Type="Integer">5</Item>
        <Item Name="Complexity" Type="String">359.000000</Item>
        <Item Name="HeavyAtomCount" Type="Integer">20</Item>
        <Item Name="AtomChiralCount" Type="Integer">0</Item>
        <Item Name="AtomChiralDefCount" Type="Integer">0</Item>
        <Item Name="AtomChiralUndefCount" Type="Integer">0</Item>
        <Item Name="BondChiralCount" Type="Integer">0</Item>
        <Item Name="BondChiralDefCount" Type="Integer">0</Item>
        <Item Name="BondChiralUndefCount" Type="Integer">0</Item>
        <Item Name="IsotopeAtomCount" Type="Integer">0</Item>
        <Item Name="CovalentUnitCount" Type="Integer">1</Item>
        <Item Name="TautomerCount" Type="Integer">67</Item>
        <Item Name="SubstanceIDList" Type="List"></Item>
        <Item Name="TPSA" Type="String">94.8</Item>
        <Item Name="AssaySourceNameList" Type="List"></Item>
        <Item Name="MinAC" Type="String"></Item>
        <Item Name="MaxAC" Type="String"></Item>
        <Item Name="MinTC" Type="String"></Item>
        <Item Name="MaxTC" Type="String"></Item>
        <Item Name="ActiveAidCount" Type="Integer">0</Item>
        <Item Name="InactiveAidCount" Type="Integer">0</Item>
        <Item Name="TotalAidCount" Type="Integer">0</Item>
        <Item Name="InChIKey" Type="String">YIGHIFUVVSYMFG-UHFFFAOYSA-N</Item>
        <Item Name="InChI" Type="String">InChI=1S/C15H12O5/c16-11-6-4-9(5-7-11)13(18)8-10-2-1-3-12(17)14(10)15(19)20/h1-7,16-17H,8H2,(H,19,20)</Item>
    </DocSum>

    <DocSum>
        <Id>53346823</Id>
        <Item Name="CID" Type="Integer">53346823</Item>
        <Item Name="SourceNameList" Type="List"></Item>
        <Item Name="SourceIDList" Type="List"></Item>
        <Item Name="SourceCategoryList" Type="List">
            <Item Name="string" Type="String">Biological Properties</Item>
        </Item>
        <Item Name="CreateDate" Type="Date">2011/09/01 00:00</Item>
        <Item Name="SynonymList" Type="List">
            <Item Name="string" Type="String">HMS2478O14</Item>
        </Item>
        <Item Name="MeSHHeadingList" Type="List"></Item>
        <Item Name="MeSHTermList" Type="List"></Item>
        <Item Name="PharmActionList" Type="List"></Item>
        <Item Name="CommentList" Type="List">
            <Item Name="string" Type="String">Asinex Ltd.:BAS 02768155</Item>
        </Item>
        <Item Name="IUPACName" Type="String">ethyl 3-amino-3-(1,3-benzodioxol-5-yl)propanoate chloride</Item>
        <Item Name="CanonicalSmiles" Type="String">CCOC(=O)CC(C1=CC2=C(C=C1)OCO2)N.[Cl-]</Item>
        <Item Name="RotatableBondCount" Type="Integer">5</Item>
        <Item Name="MolecularFormula" Type="String">C12H15ClNO4-</Item>
        <Item Name="MolecularWeight" Type="String">272.704800</Item>
        <Item Name="TotalFormalCharge" Type="Integer">-1</Item>
        <Item Name="XLogP" Type="String"></Item>
        <Item Name="HydrogenBondDonorCount" Type="Integer">1</Item>
        <Item Name="HydrogenBondAcceptorCount" Type="Integer">6</Item>
        <Item Name="Complexity" Type="String">271.000000</Item>
        <Item Name="HeavyAtomCount" Type="Integer">18</Item>
        <Item Name="AtomChiralCount" Type="Integer">1</Item>
        <Item Name="AtomChiralDefCount" Type="Integer">0</Item>
        <Item Name="AtomChiralUndefCount" Type="Integer">1</Item>
        <Item Name="BondChiralCount" Type="Integer">0</Item>
        <Item Name="BondChiralDefCount" Type="Integer">0</Item>
        <Item Name="BondChiralUndefCount" Type="Integer">0</Item>
        <Item Name="IsotopeAtomCount" Type="Integer">0</Item>
        <Item Name="CovalentUnitCount" Type="Integer">2</Item>
        <Item Name="TautomerCount" Type="Integer">1</Item>
        <Item Name="SubstanceIDList" Type="List"></Item>
        <Item Name="TPSA" Type="String">70.8</Item>
        <Item Name="AssaySourceNameList" Type="List"></Item>
        <Item Name="MinAC" Type="String"></Item>
        <Item Name="MaxAC" Type="String"></Item>
        <Item Name="MinTC" Type="String"></Item>
        <Item Name="MaxTC" Type="String"></Item>
        <Item Name="ActiveAidCount" Type="Integer">0</Item>
        <Item Name="InactiveAidCount" Type="Integer">0</Item>
        <Item Name="TotalAidCount" Type="Integer">0</Item>
        <Item Name="InChIKey" Type="String">NKQHQIJWIYNEIX-UHFFFAOYSA-M</Item>
        <Item Name="InChI" Type="String">InChI=1S/C12H15NO4.ClH/c1-2-15-12(14)6-9(13)8-3-4-10-11(5-8)17-7-16-10;/h3-5,9H,2,6-7,13H2,1H3;1H/p-1</Item>
    </DocSum>

對於您正在做的事情,XPath可能比DOM更容易。 請參閱此Java XPath教程

    XPathFactory xpf = XPathFactory.newInstance();
    XPath xp = xpf.newXPath();
    XPathExpression xe = xp.compile("//DocSum/Item[@Name='CanonicalSmiles']/text()");
    NodeList nodes = (NodeList)xe.evaluate(yourdom, XPathConstants.NODESET);

正如其他人指出的那樣,XPath是標准方法。 如果您使用的是jOOX之類的工具,那么編寫XPath會更加簡單:

String text = $(document).xpath("//DocSum/Item[@Name='CanonicalSmiles']").text();

使用jOOX,您無需使用XPath。 您還可以直接使用jOOX的類似jQuery的API,例如使用過濾器:

String text = $(document).find("Item")
                         .filter(attr("Name", "CanonicalSmiles"))
                         .text();

或使用CSS樣式選擇器:

String text = $(document).find("Item[Name='CanonicalSmiles']").text();

如我所見,每次以不同順序讀取XML元素時解析器的問題仍然沒有解決。

XML沒有任何順序的元素。 您不能等到該元素讀為num。 今天將是12點。 明天12點。 編號元素的唯一方法是明確為其編號。

<Item Name="TotalFormalCharge" Type="Integer">-1</Item>

會變成:

<Item Name="TotalFormalCharge" Num=6 Type="Integer">-1</Item>

您可以通過屬性值獲取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM