0

teststep の言語ローカリゼーションを取得する際に問題が発生しています。ここで XML ドキュメントを作成しましたが、<EN>Common Test</EN> <DE>Allgemeiner Test</DE>要素の値だけを返すか、DE or EN. NodeListout がTESTSTEPあり、子ノードを取得する場合、要素から言語要素も取得しますが、要素から言語TEST要素を 1 つだけ取得しTESTSTEPます。を使用してこれを達成するにはどうすればよいDOMですか?

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
    <DSCT2C>
        <TESTSTEPS APPLICATION="UGS">

            <TESTSTEP ORDER_NUMBER="0">
                <EN>Common Test</EN>
                <DE>Allgemeiner Test</DE>

                <TEST ORDER_NUMBER="0" NEED_FUNCTION="true" FUNCTION_NAME="functionName">
                    <DESCRIPTION>
                        <DE>Hallo</DE>
                        <EN>Hello</EN>
                    </DESCRIPTION>
                    <FILES>
                        <FILE>test.prt</FILE>
                        <FILE>test.drw</FILE>
                    </FILES>
                </TEST>
                <TEST ORDER_NUMBER="1" NEED_FUNCTION="false">
                    <DESCRIPTION>
                        <DE>Hallo2</DE>
                        <EN>Hello2</EN>
                    </DESCRIPTION>
                    <FILES>
                    </FILES>
                </TEST>
            </TESTSTEP>

        </TESTSTEPS>
    </DSCT2C>

編集:私は自分で解決策を見つけましたが、それは非常に単純でした;):

  public String getTestStepDescription(String langCode, Integer orderNumber)
  {
    NodeList list = documentTest.getElementsByTagName(XmlElements.TESTSTEP.toString());
    for (int i = 0; i < list.getLength(); i++)
    {
      Element e = (Element) list.item(i);
      if (e.getAttribute(XmlAttributes.ORDER_NUMBER.toString()).equals(orderNumber.toString()))
      {
        NodeList neu = e.getElementsByTagName(langCode.toUpperCase());
          for(int j = 0; j < neu.getLength(); j++)
          {
            Element e2 = (Element) neu.item(j);
            if(e2.getParentNode().getNodeName().equals(XmlElements.TESTSTEP.toString()))
            {
              return neu.item(j).getFirstChild().getNodeValue();
            }
          }
      }
    }

    return "ERROR_NO_TESTSTEP_DESC";
  }
4

1 に答える 1

1

この方法を試してください。

public ArrayList<String> readXML(String xmlString, String elementName,
        String textContent) {
    ArrayList<String> resultValues = new ArrayList<String>();
    try {
        boolean elementNameFlag = false, nodenameFlag = false;

        DocumentBuilder dbFactory = DocumentBuilderFactory.newInstance()
                .newDocumentBuilder();

        InputSource is = new InputSource();

        is.setCharacterStream(new StringReader(xmlString));

        Document doc = dbFactory.parse(is);

        NodeList list = doc.getElementsByTagName("*");

        String rootNodeName = doc.getDocumentElement().getNodeName();

        if (elementName == rootNodeName || textContent == rootNodeName) {
            gl.writeWarning("elementName or nodeName should not be root name");
        } else {

            for (int i = 0; i < list.getLength(); i++) {

                Element element = (Element) list.item(i);
                if (elementName == element.getNodeName()) {
                    elementNameFlag = true;
                }

                if (textContent == element.getNodeName()) {
                    nodenameFlag = true;
                }
            }


            if (elementNameFlag == nodenameFlag) {

                doc.getDocumentElement().normalize();

                NodeList nList = doc.getElementsByTagName(elementName);

                for (int temp = 0; temp < nList.getLength(); temp++) {
                    Node nNode = nList.item(temp);
                    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                        Element eElement = (Element) nNode;

                        resultValues
                                .add(getTagValue(textContent, eElement));
                    }
                }
            } else {

            }
        }
    } catch (Exception e) {

        e.printStackTrace();
    }
    return resultValues;
}// readXML()

のように呼ぶ

objectname.readXML(xmlString,"TESTSTEP","EN")
于 2013-05-23T09:48:38.353 に答える