W3C DOM-API in Java, krijgen de onderliggende elementen met naam

Ik besefte dat de methode Element.getElementsByTagName("someTagName") geeft een nodelist van alle elementen in het document dat een bepaalde tagnaam. Wat als ik wil alle onderliggende elementen door tag-naam?

Bijvoorbeeld…

<person>
  <name>Bob</name>
  <car>
    <name>Toyota Corolla</name>
  </car>
</person>

 

5 Replies
  1. 1

    getElementsByTagName werkt altijd in de context van het element is het heet op. Als genoemd op Element, alleen de kind-elementen door de gegeven tag naam zou worden gebruikt.
    Ik denk dat je zijn verwarrend dit met Document object (org.w3c.dom.Document) getElementsByTagName methode, dan zijn alle elementen met de gegeven tag naam in het document worden geretourneerd.

    • Het is getElementsByTagName.
    • Ik ben bang dat dat niet goed is — deze methode retourneert afstammeling elementen, dus bijvoorbeeld getElementsByTagName("name") uitgevoerd op de Element vertegenwoordigen persoon element terug 2 knooppunten.
    • Ik volg niet. Die twee is het terug? De node bevat ‘Bob’ en ‘Toyota Corolla’?
    • dat klopt — twee knooppunten: één met inhoud ‘Bob’ en de andere ‘Toyota Corolla’
    • En het ergste is dat we niet kunnen vertrouwen op knooppunten bestelling. De eerste knoop is niet altijd de “eerste rechtstreekse kind”. Als we het element “/persoon/naam” na het element “/persoon/auto”, dan “Toyota Corolla” zal de knooppunt-index(0)
  2. 20
    public static Element getDirectChild(Element parent, String name)
    {
        for(Node child = parent.getFirstChild(); child != null; child = child.getNextSibling())
        {
            if(child instanceof Element && name.equals(child.getNodeName())) return (Element) child;
        }
        return null;
    }
    • In mijn geval vond ik het handig om het wijzigen van de als voorwaarde aan de value: als (kind instanceof Element && (de naam.gelijk is aan(het kind.getLocalName()) || naam.gelijk is aan(het kind.getNodeName()))) {
  3. 4

    Had het zelfde probleem maar geen van de antwoorden daadwerkelijk opgelost is de vraag.

    Ik was bezig om de query op de werking Knooppunten BINNEN het poorttype Knooppunt van een WSDL, gezien het feit dat de binding node hebben ook operaties.

    <portType name="MyService">
        <operation name="op1">
          <input wsam:Action="http://somedomain.org/MyService/MyServiceRequest" message="tns:MyServiceRequest"/>
          <output wsam:Action="http://somedomain.org/MyService/MyServiceResponse" message="tns:MyServiceResponse"/>
        </operation>
        ...
    </portType>
    <binding name="MyServicePortBinding" type="tns:MyService">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <operation name="op1">
          <soap:operation soapAction=""/>
          <input>
            <soap:body use="literal"/>
          </input>
          <output>
            <soap:body use="literal"/>
          </output>
        </operation>
    </binding>

    Opgelost door het vinden van de ouder (poorttypes) en slechts gieten van Knooppunt naar het Element en het gebruik van de methode met de naam hierboven.

    Node portType = document.getElementsByTagName("portType").item(0);
    NodeList operations = ((Element)portType).getElementsByTagName("operation");

    Dat gaf mij als gevolg van de werking elementen BINNEN poorttype Knooppunt alleen.

  4. 0

    Niet alle elementen in het document zijn alle afstammeling elementen van het element het heet op. Het klinkt als dat is wat je wilt. Je hoeft alleen maar te bellen naar het op de juiste Element. Zie hier.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *