W3C DOM API в Java, получить дочерние элементы по имени
Я только понял, что метод Element.getElementsByTagName("someTagName")
возвращает нодлист всех элементов в документе, имеющих данный тэг. Что делать, если я просто хочу получить все дочерние элементы по имени тега?
Например...
<person>
<name>Bob</name>
<car>
<name>Toyota Corolla</name>
</car>
</person>
Ответы
Ответ 1
getElementsByTagName
всегда работает в контексте элемента, на который он вызван. Если вызывается Element
, будут доступны только дочерние элементы по имени указанного тега.
Я думаю, вы запутаете это с помощью метода Document
object (org.w3c.dom.Document) getElementsByTagName
, тогда будут возвращены все элементы по имени тега в документе.
Ответ 2
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;
}
Ответ 3
Имел ту же проблему, но ни один из ответов на самом деле не решил вопрос.
Я пытался запросить операции Nodes INSIDE portType Node WSDL, учитывая, что привязка Node также имеет операции.
<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>
Он решил найти родительский (portTypes) и просто отбросил его из Node в Element и используя метод, названный выше.
Node portType = document.getElementsByTagName("portType").item(0);
NodeList operations = ((Element)portType).getElementsByTagName("operation");
Это дало мне в результате только элементы операции INSIDE portType Node.
Ответ 4
У меня была аналогичная проблема. Попробуйте посмотреть на класс Node:
http://java.sun.com/javase/6/docs/api/org/w3c/dom/Node.html#getChildNodes()
Существует метод, называемый "getChildNodes", который возвращает список всех прямых дочерних узлов. Затем вам нужно отфильтровать этот список, чтобы получить только узлы-элементы с правильным тэгом.
Ответ 5
Не все элементы документа - все элементы-потомки элемента, на который он ссылался. Похоже на то, что вы хотите. Вам просто нужно позвонить ему справа Element
. См. здесь.