2017-09-15 16 views
1

私は、com.google.gwt.xml.client.Documentオブジェクトの形でXML文書を持っています。 Documentクラスには「getElementsByTagNameNS」APIは提供されていないので、これを実現するためにいくつかのネイティブJavascript関数を使用できますか?GWTコードからgetElementsByTagNameNSを呼び出す

APIには2つのパラメータが必要です。 1 - 名前空間接頭辞。 2 - XMLタグ名。

XMLタグに名前空間接頭辞が付いている場合、最近のChromeのアップデート(v60)ではDocument.getElementsByTagName( "book")のNodeListが返されないため、これが必要です。

答えて

0

c.g.g.xmlはサポートされていないネームスペースなので、XMLネームスペースを使用するドキュメントでは使用できません。また、ネイティブオブジェクトをラップし、それらにアクセスすることもありません。

最近、私はAPIのブラウザサポートにほとんど違いがないと考えています(つまり、IE6ではそうではありませんでした)ので、cggxmlの代わりにJsInteropを使用するようにコードを書き直してくださいすでに「マッピング」があるはずのElemental 2で)

0

私はgetElementsByTagName関数の代わりに素早く汚れたものを実装しました。完全修飾タグ名を取り、正確なタグ名を持つすべての子孫要素ノードを返します。

/** 
* Builds a list of the descendant elements with the supplied tag name from the {@code parent} node. The result 
* nodes are ordered by a depth-first traversal of the element graph. 
* 
* @param tag {@link String} = The tag we are looking for. Fully qualified with the namespace if present (e.g. {@code hh:label}) 
* @param parent {@link Node} = Root node of the search 
* @return {@link List<Node>} = The node list 
*/ 
public static List<Node> getElementsByTagName(String tag, Node parent) { 
    List<Node> result = new ArrayList<>(); 

    if (parent == null) { 
     return result; 
    } 

    NodeList children = parent.getChildNodes(); 
    for (int childIdx = 0; childIdx < children.getLength(); childIdx++) { 
     Node child = children.item(childIdx); 
     if (child.getNodeType() != Node.ELEMENT_NODE) { 
      continue; 
     } 
     if (((Element) child).getTagName() == tag) { 
      result.add(child); 
     } 
     getElementsByTagName(tag, child, result); 
    } 
    return result; 
} 

private static void getElementsByTagName(String tag, Node parent, List<Node> partialResult) { 
    if (parent == null) { 
     return; 
    } 

    NodeList children = parent.getChildNodes(); 
    for (int childIdx = 0; childIdx < children.getLength(); childIdx++) { 
     Node child = children.item(childIdx); 
     if (child.getNodeType() != Node.ELEMENT_NODE) { 
      continue; 
     } 
     if (((Element) child).getTagName() == tag) { 
      partialResult.add(child); 
     } 
     getElementsByTagName(tag, child, partialResult); 
    } 
} 
関連する問題