java - 如何在 XML 中使用 java 方法的返回值
问题描述
我有一个这样的xml
<step>
<navigationButtonSelector>.step-one-action-button</navigationButtonSelector>
<formField>
<name>emailAddress</name>
<value>new2@gmail.com</value>
</formField>
</step>
现在我不能在这里硬编码值(new2@gmail.com)。相反,我必须随机生成一个字符串,并在我运行自动化套件时使用它。我可以在运行时在 xml 本身内生成一个随机字符串吗?
另一种可能性是创建一个返回随机字符串的 Java 方法。现在如何在我的 XML 文件中使用该值?请帮忙
解决方案
这段代码可能看起来很臃肿,但实际上非常强大,以防您必须执行更多编辑。它显示了从解析、修改和序列化 XML 数据到 String 的整个往返过程。
String xml = "<step>\n" +
" <navigationButtonSelector>.step-one-action-button</navigationButtonSelector>\n" +
" <formField>\n" +
" <name>emailAddress</name>\n" +
" <value>new2@gmail.com</value>\n" +
" </formField>\n" +
"</step>";
// parse document
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(xml)));
// find editing locatioin
XPath xpath = XPathFactory.newInstance().newXPath();
Element value = (Element)xpath.evaluate("/step/formField/value", doc, XPathConstants.NODE);
// replace value
while (value.hasChildNodes()) {
value.removeChild(value.getFirstChild());
}
value.appendChild(doc.createTextNode("a random string"));
// serialize document
StringWriter sw = new StringWriter();
Transformer t = TransformerFactory.newDefaultInstance().newTransformer();
t.transform(new DOMSource(doc), new StreamResult(sw));
xml = sw.toString();
System.out.println(xml);
推荐阅读
- c# - 如何在设计时显示 datagridview 行和项目
- python - 迭代自定义类。TypeError:对象不可迭代
- excel - 当我运行此代码时,我的笔记本电脑冻结并且不执行任何任务,我该如何解决这个问题?
- angular - 在一个下拉列表的单击事件中,其他同级组件下拉列表未加载
- javascript - 将功能组件更改为类组件
- python - 如何使用“for in range”向后迭代字符串?(应用程序是验证UPC代码)
- python - 每个时期隐藏层的输出并将其存储在keras的列表中?
- python - 无法使用 python 在 azure 函数中运行另一个 python 脚本
- html-lists - SyntaxError:当前不支持私有字段
- php - 如果在 IIS 上启用了“Windows 身份验证”,则无法读取 PHP 会话数组