java - 需要迭代具有同名子节点的 xml

标签 java xml nodes

我有一个 xml

<CommonTestData>
<GiftCards> 
  <GiftCard>
      <cardnumber>7777016774730834</cardnumber>
      <number>1815</number>
  </GiftCard>
  <GiftCard>
      <cardnumber>7777016774687937</cardnumber>
      <number>6256</number>
  </GiftCard>
</GiftCards>

我必须迭代这些 xml 并读取值,然后进入 Selenium Web 应用程序并检查礼品卡申请金额是否大于零。 如果申请的金额为零,请尝试另一张卡。如果应用的金额大于零,则中断循环

我的代码看起来像

for (int i=0;i<xmlvalue.getNodeCount("GiftCard", "CommonTestData.xml");i++){
            //giftcardaccordian.click();
            giftcardnumber.sendKeys(xmlvalue.getValue("cardnumber"+i, "GiftCard", "CommonTestData.xml")); // I need code for getvalue function so that i can iterate through 
            giftcardpin.sendKeys(xmlvalue.getValue("cardnumber"+i, "GiftCard", "CommonTestData.xml"));

            giftcardapplybutton.click();
            try{
                if(appliedgiftcardamount.getText()!="$0"){
                    break;
                }
            }catch (Exception e ){
                Assert.fail("Cannot apply reward certicate");
            }
        }

我需要 Getvalue 的实现,以便我可以迭代。现在我的实现是这样的

public String getValue(String csstagname, String Elementname, String xmlfilename) {
    String eElement1;

    try {
      String path = "config/XML/" + xmlfilename;
      File fXmlFile = new File(path);
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
      Document doc = dBuilder.parse(fXmlFile);
      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) {
          eElement1 = csstagname;
          Element eElement2 = (Element) nNode;

          value = (getTagValue(eElement1, eElement2));

        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {

      return (value);
    }
  }

最佳答案

您正在做的事情是可能的,但它不符合 XML 的精神。您控制 XML 文件吗?更改格式,以便卡 nnumber 和 number 有自己的总体标签将它们绑定(bind)在一起:

<CommonTestData>
    <GiftCards> 
      <GiftCard>
          <cardnumber>7777016774730834</cardnumber>
          <number>1815</number>
      </GiftCard>
      <GiftCard>
          <cardnumber>7777016774687937</cardnumber>
          <number>6256</number>
      </GiftCard>
    </GiftCards>
</CommonTestData>

如果您不控制格式,请提取所有标记有 cardnumber 的节点、所有标记有 number 的节点,然后使用相同的索引访问这两个数组。

关于java - 需要迭代具有同名子节点的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37973688/

相关文章:

xml - JSTL - 解析不适​​用于具有命名空间的元素

mongodb - Mongoose - 如何仅验证特定字段?

C# HtmlAgilityPack 内部 html 在附加节点后不改变

java - 具有偏好 Activity 的切换按钮

java - 在Sqlite数据库的同一个Activity布局中添加多个编辑文本(大约60个)

java - 计算 BST 中的节点数

java - 出现错误 "Exception in thread "main“java.lang.ExceptionInInitializerError”

java - 为什么出现java.lang.StackOverflowError : null when I try to print my entity

java swing 单选按钮 - java.lang.NullPointerException

jsp - 仅使用 JSP 页面创建 JSON WebService