【问题标题】:Changing value of an input in XML using Java使用 Java 更改 XML 中输入的值
【发布时间】:2021-12-17 17:33:21
【问题描述】:

在此任务中,我试图将文本输入字段的值更改为来自分解大字符串的变量。 XML 包含常规的 HTML 代码,但我想知道是否可以使用 Java(而不是 Javascript)来完成这项任务。 XML 文件是标准文件,无法编辑。

customerDataEntryTabs.xml

<?xml version='1.0' encoding='UTF-8'?>
<html>
  <head>
    <link rel="stylesheet" href="css/common/common.css" />
    <link rel="stylesheet" href="css/common/inputs.css" />
    <link rel="stylesheet" href="css/common/tables.css" />
    <link rel="stylesheet" href="css/custom/custom.css" />
  </head>

  <body id="tabsContainer" layout="wrapLayout" class="customerInfoPanel">

    <form name="csForm" bean="validateAllFieldsForm">
      <div id="contentArea" class="contentArea customerDataEntryPageTitle" constraints="Center"
        layout="wrapLayout">
        <div id="leftContentArea" class="leftContentArea" layout="wrapLayout">

          <div id="leftContentTopArea" slot="true" class="topArea"
            layout="wrapLayout">
                      <label id="pageTitle" class="pageTitle" valueKey="customerDataEntry.title" />

          </div>

          <div id="leftContentTopTabArea" class="topArea" layout="wrapLayout">
            <!-- tab buttons -->
            <div id="tabStripsButtonsPanel" class="tabStripsPanel " layout="wrapLayout">
              <input id="tab0Button" refId="tab0" type="button" />
              <input id="tab1Button" refId="tab1" type="button" />
              <input id="tab2Button" refId="tab2" type="button" />
              <input id="tab3Button" refId="tab3" type="button" />
              <input id="tab4Button" refId="tab4" type="button" />
              <input id="tab5Button" refId="tab5" type="button" />
              <input id="tab6Button" refId="tab6" type="button" />
            </div>
          </div>



          <div id="leftContentArea" class="leftContentArea" layout="wrapLayout">

            <div id="leftContentCenterArea" slot="true" class="centerArea"
              layout="wrapLayout">

              <!-- tab panels -->
              <div id="tabsSubContainer" constraints="Center" class="tabContent"
                layout="cardLayout">
                <div id="tab0" layout="wrapLayout">
                  <div id="leftContentCenterArea1Tab0" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab0Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab0Field0Input" type="text" />
                      <label id="tab0Field0Label" />
                    </div>
                    <div id="tab0Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab0Field1Input" type="text" />
                      <label id="tab0Field1Label" />
                    </div>
                    <div id="tab0Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab0Field2Input" type="text" />
                      <label id="tab0Field2Label" />
                    </div>
                    <div id="tab0Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab0Field3Input" type="text" />
                      <label id="tab0Field3Label" />
                    </div>
                  </div>
                  <div id="leftContentCenterArea2Tab0" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab0Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab0Field4Input" type="text" />
                      <label id="tab0Field4Label" />
                    </div>
                    <div id="tab0Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab0Field5Input" type="text" />
                      <label id="tab0Field5Label" />
                    </div>
                    <div id="tab0Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab0Field6Input" type="text" />
                      <label id="tab0Field6Label" />
                    </div>
                    <div id="tab0Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab0Field7Input" type="text" />
                      <label id="tab0Field7Label" />
                    </div>
                  </div>
                </div>

                <div id="tab1" layout="wrapLayout">
                  <div id="leftContentCenterArea1Tab1" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab1Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab1Field0Input" type="text" />
                      <label id="tab1Field0Label" />
                    </div>
                    <div id="tab1Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab1Field1Input" type="text" />
                      <label id="tab1Field1Label" />
                    </div>
                    <div id="tab1Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab1Field2Input" type="text" />
                      <label id="tab1Field2Label" />
                    </div>
                    <div id="tab1Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab1Field3Input" type="text" />
                      <label id="tab1Field3Label" />
                    </div>
                  </div>
                  <div id="leftContentCenterArea2Tab1" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab1Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab1Field4Input" type="text" />
                      <label id="tab1Field4Label" />
                    </div>
                    <div id="tab1Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab1Field5Input" type="text" />
                      <label id="tab1Field5Label" />
                    </div>
                    <div id="tab1Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab1Field6Input" type="text" />
                      <label id="tab1Field6Label" />
                    </div>
                    <div id="tab1Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab1Field7Input" type="text" />
                      <label id="tab1Field7Label" />
                    </div>
                  </div>
                </div>

                <div id="tab2" layout="wrapLayout">
                  <div id="leftContentCenterArea1Tab2" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab2Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab2Field0Input" type="text" />
                      <label id="tab2Field0Label" />
                    </div>
                    <div id="tab2Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab2Field1Input" type="text" />
                      <label id="tab2Field1Label" />
                    </div>
                    <div id="tab2Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab2Field2Input" type="text" />
                      <label id="tab2Field2Label" />
                    </div>
                    <div id="tab2Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab2Field3Input" type="text" />
                      <label id="tab2Field3Label" />
                    </div>
                  </div>
                  <div id="leftContentCenterArea2Tab2" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab2Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab2Field4Input" type="text" />
                      <label id="tab2Field4Label" />
                    </div>
                    <div id="tab2Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab2Field5Input" type="text" />
                      <label id="tab2Field5Label" />
                    </div>
                    <div id="tab2Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab2Field6Input" type="text" />
                      <label id="tab2Field6Label" />
                    </div>
                    <div id="tab2Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab2Field7Input" type="text" />
                      <label id="tab2Field7Label" />
                    </div>
                  </div>
                </div>

                <div id="tab3" layout="wrapLayout">
                  <div id="leftContentCenterArea1Tab3" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab3Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab3Field0Input" type="text" />
                      <label id="tab3Field0Label" />
                    </div>                    
                    <div id="tab3Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab3Field1Input" type="text"/>
                      <label id="tab3Field1Label" />
                    </div>
                    <div id="tab3Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab3Field2Input" type="text" />
                      <label id="tab3Field2Label" />
                    </div>
                    <div id="tab3Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab3Field3Input" type="text" />
                      <label id="tab3Field3Label" />
                    </div>
                  </div>
                  <div id="leftContentCenterArea2Tab3" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab3Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab3Field4Input" type="text" />
                      <label id="tab3Field4Label" />
                    </div>
                    <div id="tab3Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab3Field5Input" type="text" />
                      <label id="tab3Field5Label" />
                    </div>
                    <div id="tab3Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab3Field6Input" type="text" />
                      <label id="tab3Field6Label" />
                    </div>
                    <div id="tab3Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab3Field7Input" type="text" />
                      <label id="tab3Field7Label" />
                    </div>
                  </div>
                </div>

                <div id="tab4" layout="wrapLayout">
                  <div id="leftContentCenterArea1Tab4" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab4Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab4Field0Input" type="text" />
                      <label id="tab4Field0Label" />
                    </div>
                    <div id="tab4Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab4Field1Input" type="text" />
                      <label id="tab4Field1Label" />
                    </div>
                    <div id="tab4Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab4Field2Input" type="text" />
                      <label id="tab4Field2Label" />
                    </div>
                    <div id="tab4Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab4Field3Input" type="text" />
                      <label id="tab4Field3Label" />
                    </div>
                  </div>
                  <div id="leftContentCenterArea2Tab4" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab4Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab4Field4Input" type="text" />
                      <label id="tab4Field4Label" />
                    </div>
                    <div id="tab4Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab4Field5Input" type="text" />
                      <label id="tab4Field5Label" />
                    </div>
                    <div id="tab4Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab4Field6Input" type="text" />
                      <label id="tab4Field6Label" />
                    </div>
                    <div id="tab4Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab4Field7Input" type="text" />
                      <label id="tab4Field7Label" />
                    </div>
                  </div>
                </div>

                <div id="tab5" layout="wrapLayout">
                  <div id="leftContentCenterArea1Tab5" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab5Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab5Field0Input" type="text" />
                      <label id="tab5Field0Label" />
                    </div>
                    <div id="tab5Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab5Field1Input" type="text" />
                      <label id="tab5Field1Label" />
                    </div>
                    <div id="tab5Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab5Field2Input" type="text" />
                      <label id="tab5Field2Label" />
                    </div>
                    <div id="tab5Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab5Field3Input" type="text" />
                      <label id="tab5Field3Label" />
                    </div>
                  </div>
                  <div id="leftContentCenterArea2Tab5" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab5Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab5Field4Input" type="text" />
                      <label id="tab5Field4Label" />
                    </div>
                    <div id="tab5Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab5Field5Input" type="text" />
                      <label id="tab5Field5Label" />
                    </div>
                    <div id="tab5Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab5Field6Input" type="text" />
                      <label id="tab5Field6Label" />
                    </div>
                    <div id="tab5Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab5Field7Input" type="text" />
                      <label id="tab5Field7Label" />
                    </div>
                  </div>
                </div>

                <div id="tab6" layout="wrapLayout">
                  <div id="leftContentCenterArea1Tab6" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab6Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab6Field0Input" type="text" />
                      <label id="tab6Field0Label" />
                    </div>
                    <div id="tab6Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab6Field1Input" type="text" />
                      <label id="tab6Field1Label" />
                    </div>
                    <div id="tab6Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab6Field2Input" type="text" />
                      <label id="tab6Field2Label" />
                    </div>
                    <div id="tab6Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab6Field3Input" type="text" />
                      <label id="tab6Field3Label" />
                    </div>
                  </div>
                  <div id="leftContentCenterArea2Tab6" class="fieldLabelArea inputArea"
                    layout="wrapLayout">
                    <div id="tab6Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab6Field4Input" type="text" />
                      <label id="tab6Field4Label" />
                    </div>
                    <div id="tab6Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab6Field5Input" type="text" />
                      <label id="tab6Field5Label" />
                    </div>
                    <div id="tab6Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab6Field6Input" type="text" />
                      <label id="tab6Field6Label" />
                    </div>
                    <div id="tab6Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"
                      bean="fieldLabel">
                      <input id="tab6Field7Input" type="text" />
                      <label id="tab6Field7Label" />
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>

        </div>


        <div id="rightContentArea" class="rightContentArea" layout="wrapLayout">
          <div id="rightContentTopArea" class="topArea" layout="wrapLayout" />
          <div id="rightContentCenterArea" slot="true" class="centerArea buttonsPanel main" layout="wrapLayout">
            <input id="cancelButton"   class="medium ca"  type="button"   valueKey="button.cancel" />
            <input id="takeOverButton" class="medium"     type="button" valueKey="button.takeover" />
            <input id="forwardButton"  class="medium cno" type="submit"   valueKey="button.ok" bean="forwardButton" />
          </div>
        </div>


      </div>
    </form>

  </body>
</html>
public void showInfo(String info) throws Exception {
        String[] arr = info.split("<");
        String country = "";
        String lastName = "";
        String firstName = "";
        String DOBmonth = "";
        String DOBday = "";
        String tyear = "";
        String DOByear = "";
        String fullBOD = "";
        String gender = "";

        for(int i = 0; i < arr.length; i++){
            //System.out.print(arr[i] + "\n");
            if(i == 1) {
                country = "" + arr[i].substring(0, 3);
                lastName = "" + arr[i].substring(3);
            }
            if(arr[i].matches(".*\\d.*")) {
                tyear = "" + arr[i].substring(13,15);
                DOBmonth= "" + arr[i].substring(15,17);
                DOBday= "" + arr[i].substring(17,19);

                DateFormat sdfp = new SimpleDateFormat("yy");
                Date d = sdfp.parse(tyear);
                DateFormat sdff = new SimpleDateFormat("yyyy");
                String finaldate = sdff.format(d);
                DOByear = finaldate.toString();

                fullBOD = "" + DOBmonth + "/" + DOBday + "/" + DOByear;

                gender = "" + arr[i].substring(20, 21);
                break;
            }
        firstName = "" + arr[3];
        }
    }

例如,我想将在xml文件中找到的带有id(“tab0Field0Input”)的文本输入字段中的值更改为在java代码中找到的变量(firstName)。

【问题讨论】:

  • 你可以使用一些html解析器,html不是一个有效的xml。

标签: java html xml


【解决方案1】:

您可以使用org.w3c.dom.Document。它是一个 XML 解析器,它已经包含在 Java 中,没有任何第三方库。

您可以将您的 XML 文件转换为 Document,然后访问您需要的字段并更改值。

这是一个例子:

// Reading the file and turning it into a Document
File xmlFile = new File("customerDataEntryTabs.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc =  builder.parse(xmlFile);

// Getting all input elements
NodeList inputElements =  doc.getElementsByTagName("input");

// Traversing all input elements
for (int i = 0; i < inputElements.getLength() ; i++)
{
    Element currentInputElement = (Element) inputElements.item(i);

    Node idNode = currentInputElement.getAttributes().getNamedItem("id"); //Getting the ID of the element
    if(idNode != null)
    {
        if(idNode.getTextContent().equals("tab0Field0Input")) // Checking if the ID is equal to what you actually want
        {
            currentInputElement.setAttribute("value", "YOUR VALUE COMES HERE"); // Setting the Value of the input element
        }
    }
}

// Transforming the result document to a string...
Transformer trans = TransformerFactory.newInstance().newTransformer();
trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
trans.setOutputProperty(OutputKeys.INDENT, "yes");

StringWriter sw = new StringWriter();
trans.transform(new DOMSource(doc), new StreamResult(sw));

String resultXml =  sw.toString();

得到String后,就可以为所欲为。

【讨论】:

  • 我将此 sn-p 添加到我的代码中出现错误的位置,但它并不能完全正常工作。当我尝试调试时,文档 doc = builder.parse(xmlFile); 中的代码失败行而不给出任何理由。它不会进入 for 循环。
  • 我用你的文件测试了它,它确实有效。您输入的文件的路径很可能找不到/不正确。给出正确的路径。
【解决方案2】:

首先将文件加载到内存中,然后编辑值,最后将文件写回。

File xmlFile = new File("customerDataEntryTabs.xml");
String newValue = "whatever is your new value";

// parse file
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc =  builder.parse(xmlFile);

// find location to edit and apply new value - we do that using XPath
XPath xpath = XPathFactory.newInstance().newXPath();
Element input = (Element)xpath.evaluate("//input[@id='tab0Field0Input']", doc, XPathConstants.NODE)
input.setAttribute("value", newValue);

// write back the file - we serialize using XSLT
Transformer t = TransformerFactory.newInstance().newTransformer();
t.transform(new DomSource(dom), new StreamResult(new FileOutputStream(xmlFile)));

【讨论】:

    猜你喜欢
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    相关资源
    最近更新 更多