我有一个XML格式如下;
<TestCase>
<Step Sel = "deleteAllVisibleCookies" Obj = "All cookies" Val = ""></Step>
<Step Sel = "open" Obj = "URL" Val = "UserName:Password"></Step>
<Step Sel = "waitForElementPresent" Obj = "link=mobile" Val = ""></Step>
<Step Sel = "clickAndWait" Obj = "Mobile link" Val = ""></Step>
...
</TestCase>
<TestCase>
<Step Sel = "deleteAllVisibleCookies" Obj = "All cookies" Val = ""></Step>
<Step Sel = "open" Obj = "URL" Val = "UserName:Password"></Step>
<Step Sel = "waitForElementPresent" Obj = "link=mobile" Val = ""></Step>
<Step Sel = "clickAndWait" Obj = "Mobile link" Val = ""></Step>
...
</TestCase>
基于上面的XML文件,我正在创建一个对象。我试图将所有步骤保存到二维数组中。所以一行是一个测试用例。
int i=0;
int j=0;
for (int TC = 0; TC < TCLst.getLength(); TC++)
int k=0;
Node TCLstNode = TCLst.item(TC);
if (TCLstNode.getNodeType() == Node.ELEMENT_NODE)
{
NodeList StepLst = TCLstNode.getChildNodes();
Step = new String [TCCount][StepLst.getLength()];//defining total length
Sel = new String [TCCount][StepLst.getLength()];
Obj = new String [TCCount][StepLst.getLength()];
Val = new String [TCCount][StepLst.getLength()];
for (int Step = 0; Step < StepLst.getLength(); Step++)
{
Node StepLstNode = StepLst.item(Step);
if (StepLstNode.getNodeType() == Node.ELEMENT_NODE)
{
if (StepLstNode.getNodeName() == "Step")
{
Sel[i][k] = ObjectType.getAttribute(StepLstNode,"Sel");//returns value of Sel attribute
Obj[i][k] = ObjectType.getAttribute(StepLstNode,"Obj");
Val[i][k] = ObjectType.getAttribute(StepLstNode,"Val");
stepCountInTC++;
k++;
}
}//NodeType
}//for
i++;
stepCountInATCOfModule[j] = stepCountInTC;
j++;
stepCountInTC = 1;
}//TC if
我面临的问题是在创建对象之后,在打印任何二维数组时我得到输出(这里我使用了Sel属性);
[[null,null,null,null,...] [deleteAllVisibleCookies,open,waitForElementPresent,clickAndWait,...]]
问题此处首先将测试用例值保存为null。如果我使用带有3个测试用例的XML,则前2个测试用例保存为null,第3个案例正确保存到数组中。
另外请建议使用任何集合而不是二维数组。
答案 0 :(得分:2)
你错过了大括号:
for (int TC = 0; TC < TCLst.getLength(); TC++)
int k=0;
此2行之后的代码独立于此for
,因为java认为您这样做:
for (int TC = 0; TC < TCLst.getLength(); TC++) {
int k=0;
}
因此k
始终为0
。
您的代码存在多个需要修复的问题。例如:
Step = new String [TCCount][StepLst.getLength()];
和
int Step = 0
Step
更像是int
或其他东西(在代码中不可见)混合它们并不是一件好事。您也没有使用camelCase
变量名称。
答案 1 :(得分:0)
在每个外部循环中,用一个新数组覆盖整个数组:
Step = new String [TCCount][StepLst.getLength()];//defining total length
最后意味着您只找到Step变量的最后一个结果。
你必须做这样的事情:
int length = 10;
String[][] Step = new String[length][];
for (int i = 0; i < length; i++)
{
int innerLength = 2;
Step[i] = new String[innerLength];
for (int j = 0; j < innerLength; j++)
{
Step[i][j] = "Value";
}
}