Изменение значения входных данных в XML с использованием Java

#java #html #xml

Вопрос:

В этой задаче я пытаюсь изменить значения полей ввода текста на переменные, полученные в результате разбиения большой строки. XML содержит обычный HTML-код, но мне было интересно, можно ли выполнить эту задачу с помощью Java (не Javascript). XML-файл является стандартным файлом и не может быть отредактирован.

customerDataEntryTabs.xml

 lt;?xml version='1.0' encoding='UTF-8'?gt; lt;htmlgt;  lt;headgt;  lt;link rel="stylesheet" href="css/common/common.css" /gt;  lt;link rel="stylesheet" href="css/common/inputs.css" /gt;  lt;link rel="stylesheet" href="css/common/tables.css" /gt;  lt;link rel="stylesheet" href="css/custom/custom.css" /gt;  lt;/headgt;   lt;body id="tabsContainer" layout="wrapLayout" class="customerInfoPanel"gt;   lt;form name="csForm" bean="validateAllFieldsForm"gt;  lt;div id="contentArea" class="contentArea customerDataEntryPageTitle" constraints="Center"  layout="wrapLayout"gt;  lt;div id="leftContentArea" class="leftContentArea" layout="wrapLayout"gt;   lt;div id="leftContentTopArea" slot="true" class="topArea"  layout="wrapLayout"gt;  lt;label id="pageTitle" class="pageTitle" valueKey="customerDataEntry.title" /gt;   lt;/divgt;   lt;div id="leftContentTopTabArea" class="topArea" layout="wrapLayout"gt;  lt;!-- tab buttons --gt;  lt;div id="tabStripsButtonsPanel" class="tabStripsPanel " layout="wrapLayout"gt;  lt;input id="tab0Button" refId="tab0" type="button" /gt;  lt;input id="tab1Button" refId="tab1" type="button" /gt;  lt;input id="tab2Button" refId="tab2" type="button" /gt;  lt;input id="tab3Button" refId="tab3" type="button" /gt;  lt;input id="tab4Button" refId="tab4" type="button" /gt;  lt;input id="tab5Button" refId="tab5" type="button" /gt;  lt;input id="tab6Button" refId="tab6" type="button" /gt;  lt;/divgt;  lt;/divgt;     lt;div id="leftContentArea" class="leftContentArea" layout="wrapLayout"gt;   lt;div id="leftContentCenterArea" slot="true" class="centerArea"  layout="wrapLayout"gt;   lt;!-- tab panels --gt;  lt;div id="tabsSubContainer" constraints="Center" class="tabContent"  layout="cardLayout"gt;  lt;div id="tab0" layout="wrapLayout"gt;  lt;div id="leftContentCenterArea1Tab0" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab0Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab0Field0Input" type="text" /gt;  lt;label id="tab0Field0Label" /gt;  lt;/divgt;  lt;div id="tab0Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab0Field1Input" type="text" /gt;  lt;label id="tab0Field1Label" /gt;  lt;/divgt;  lt;div id="tab0Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab0Field2Input" type="text" /gt;  lt;label id="tab0Field2Label" /gt;  lt;/divgt;  lt;div id="tab0Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab0Field3Input" type="text" /gt;  lt;label id="tab0Field3Label" /gt;  lt;/divgt;  lt;/divgt;  lt;div id="leftContentCenterArea2Tab0" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab0Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab0Field4Input" type="text" /gt;  lt;label id="tab0Field4Label" /gt;  lt;/divgt;  lt;div id="tab0Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab0Field5Input" type="text" /gt;  lt;label id="tab0Field5Label" /gt;  lt;/divgt;  lt;div id="tab0Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab0Field6Input" type="text" /gt;  lt;label id="tab0Field6Label" /gt;  lt;/divgt;  lt;div id="tab0Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab0Field7Input" type="text" /gt;  lt;label id="tab0Field7Label" /gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;   lt;div id="tab1" layout="wrapLayout"gt;  lt;div id="leftContentCenterArea1Tab1" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab1Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab1Field0Input" type="text" /gt;  lt;label id="tab1Field0Label" /gt;  lt;/divgt;  lt;div id="tab1Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab1Field1Input" type="text" /gt;  lt;label id="tab1Field1Label" /gt;  lt;/divgt;  lt;div id="tab1Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab1Field2Input" type="text" /gt;  lt;label id="tab1Field2Label" /gt;  lt;/divgt;  lt;div id="tab1Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab1Field3Input" type="text" /gt;  lt;label id="tab1Field3Label" /gt;  lt;/divgt;  lt;/divgt;  lt;div id="leftContentCenterArea2Tab1" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab1Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab1Field4Input" type="text" /gt;  lt;label id="tab1Field4Label" /gt;  lt;/divgt;  lt;div id="tab1Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab1Field5Input" type="text" /gt;  lt;label id="tab1Field5Label" /gt;  lt;/divgt;  lt;div id="tab1Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab1Field6Input" type="text" /gt;  lt;label id="tab1Field6Label" /gt;  lt;/divgt;  lt;div id="tab1Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab1Field7Input" type="text" /gt;  lt;label id="tab1Field7Label" /gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;   lt;div id="tab2" layout="wrapLayout"gt;  lt;div id="leftContentCenterArea1Tab2" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab2Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab2Field0Input" type="text" /gt;  lt;label id="tab2Field0Label" /gt;  lt;/divgt;  lt;div id="tab2Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab2Field1Input" type="text" /gt;  lt;label id="tab2Field1Label" /gt;  lt;/divgt;  lt;div id="tab2Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab2Field2Input" type="text" /gt;  lt;label id="tab2Field2Label" /gt;  lt;/divgt;  lt;div id="tab2Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab2Field3Input" type="text" /gt;  lt;label id="tab2Field3Label" /gt;  lt;/divgt;  lt;/divgt;  lt;div id="leftContentCenterArea2Tab2" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab2Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab2Field4Input" type="text" /gt;  lt;label id="tab2Field4Label" /gt;  lt;/divgt;  lt;div id="tab2Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab2Field5Input" type="text" /gt;  lt;label id="tab2Field5Label" /gt;  lt;/divgt;  lt;div id="tab2Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab2Field6Input" type="text" /gt;  lt;label id="tab2Field6Label" /gt;  lt;/divgt;  lt;div id="tab2Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab2Field7Input" type="text" /gt;  lt;label id="tab2Field7Label" /gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;   lt;div id="tab3" layout="wrapLayout"gt;  lt;div id="leftContentCenterArea1Tab3" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab3Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab3Field0Input" type="text" /gt;  lt;label id="tab3Field0Label" /gt;  lt;/divgt;   lt;div id="tab3Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab3Field1Input" type="text"/gt;  lt;label id="tab3Field1Label" /gt;  lt;/divgt;  lt;div id="tab3Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab3Field2Input" type="text" /gt;  lt;label id="tab3Field2Label" /gt;  lt;/divgt;  lt;div id="tab3Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab3Field3Input" type="text" /gt;  lt;label id="tab3Field3Label" /gt;  lt;/divgt;  lt;/divgt;  lt;div id="leftContentCenterArea2Tab3" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab3Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab3Field4Input" type="text" /gt;  lt;label id="tab3Field4Label" /gt;  lt;/divgt;  lt;div id="tab3Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab3Field5Input" type="text" /gt;  lt;label id="tab3Field5Label" /gt;  lt;/divgt;  lt;div id="tab3Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab3Field6Input" type="text" /gt;  lt;label id="tab3Field6Label" /gt;  lt;/divgt;  lt;div id="tab3Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab3Field7Input" type="text" /gt;  lt;label id="tab3Field7Label" /gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;   lt;div id="tab4" layout="wrapLayout"gt;  lt;div id="leftContentCenterArea1Tab4" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab4Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab4Field0Input" type="text" /gt;  lt;label id="tab4Field0Label" /gt;  lt;/divgt;  lt;div id="tab4Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab4Field1Input" type="text" /gt;  lt;label id="tab4Field1Label" /gt;  lt;/divgt;  lt;div id="tab4Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab4Field2Input" type="text" /gt;  lt;label id="tab4Field2Label" /gt;  lt;/divgt;  lt;div id="tab4Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab4Field3Input" type="text" /gt;  lt;label id="tab4Field3Label" /gt;  lt;/divgt;  lt;/divgt;  lt;div id="leftContentCenterArea2Tab4" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab4Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab4Field4Input" type="text" /gt;  lt;label id="tab4Field4Label" /gt;  lt;/divgt;  lt;div id="tab4Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab4Field5Input" type="text" /gt;  lt;label id="tab4Field5Label" /gt;  lt;/divgt;  lt;div id="tab4Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab4Field6Input" type="text" /gt;  lt;label id="tab4Field6Label" /gt;  lt;/divgt;  lt;div id="tab4Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab4Field7Input" type="text" /gt;  lt;label id="tab4Field7Label" /gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;   lt;div id="tab5" layout="wrapLayout"gt;  lt;div id="leftContentCenterArea1Tab5" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab5Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab5Field0Input" type="text" /gt;  lt;label id="tab5Field0Label" /gt;  lt;/divgt;  lt;div id="tab5Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab5Field1Input" type="text" /gt;  lt;label id="tab5Field1Label" /gt;  lt;/divgt;  lt;div id="tab5Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab5Field2Input" type="text" /gt;  lt;label id="tab5Field2Label" /gt;  lt;/divgt;  lt;div id="tab5Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab5Field3Input" type="text" /gt;  lt;label id="tab5Field3Label" /gt;  lt;/divgt;  lt;/divgt;  lt;div id="leftContentCenterArea2Tab5" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab5Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab5Field4Input" type="text" /gt;  lt;label id="tab5Field4Label" /gt;  lt;/divgt;  lt;div id="tab5Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab5Field5Input" type="text" /gt;  lt;label id="tab5Field5Label" /gt;  lt;/divgt;  lt;div id="tab5Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab5Field6Input" type="text" /gt;  lt;label id="tab5Field6Label" /gt;  lt;/divgt;  lt;div id="tab5Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab5Field7Input" type="text" /gt;  lt;label id="tab5Field7Label" /gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;   lt;div id="tab6" layout="wrapLayout"gt;  lt;div id="leftContentCenterArea1Tab6" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab6Field0" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab6Field0Input" type="text" /gt;  lt;label id="tab6Field0Label" /gt;  lt;/divgt;  lt;div id="tab6Field1" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab6Field1Input" type="text" /gt;  lt;label id="tab6Field1Label" /gt;  lt;/divgt;  lt;div id="tab6Field2" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab6Field2Input" type="text" /gt;  lt;label id="tab6Field2Label" /gt;  lt;/divgt;  lt;div id="tab6Field3" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab6Field3Input" type="text" /gt;  lt;label id="tab6Field3Label" /gt;  lt;/divgt;  lt;/divgt;  lt;div id="leftContentCenterArea2Tab6" class="fieldLabelArea inputArea"  layout="wrapLayout"gt;  lt;div id="tab6Field4" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab6Field4Input" type="text" /gt;  lt;label id="tab6Field4Label" /gt;  lt;/divgt;  lt;div id="tab6Field5" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab6Field5Input" type="text" /gt;  lt;label id="tab6Field5Label" /gt;  lt;/divgt;  lt;div id="tab6Field6" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab6Field6Input" type="text" /gt;  lt;label id="tab6Field6Label" /gt;  lt;/divgt;  lt;div id="tab6Field7" class="fieldLabel fieldLabelSmall fieldLabelShort"  bean="fieldLabel"gt;  lt;input id="tab6Field7Input" type="text" /gt;  lt;label id="tab6Field7Label" /gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;/divgt;   lt;/divgt;    lt;div id="rightContentArea" class="rightContentArea" layout="wrapLayout"gt;  lt;div id="rightContentTopArea" class="topArea" layout="wrapLayout" /gt;  lt;div id="rightContentCenterArea" slot="true" class="centerArea buttonsPanel main" layout="wrapLayout"gt;  lt;input id="cancelButton" class="medium ca" type="button" valueKey="button.cancel" /gt;  lt;input id="takeOverButton" class="medium" type="button" valueKey="button.takeover" /gt;  lt;input id="forwardButton" class="medium cno" type="submit" valueKey="button.ok" bean="forwardButton" /gt;  lt;/divgt;  lt;/divgt;    lt;/divgt;  lt;/formgt;   lt;/bodygt; lt;/htmlgt;  
 public void showInfo(String info) throws Exception {  String[] arr = info.split("lt;");  String country = "";  String lastName = "";  String firstName = "";  String DOBmonth = "";  String DOBday = "";  String tyear = "";  String DOByear = "";  String fullBOD = "";  String gender = "";   for(int i = 0; i lt; 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];  }  }  

Например, я хотел бы изменить значение в поле ввода текста с идентификатором («tab0Field0Input»), найденным в xml-файле, на переменную (имя), найденную в коде java.

Комментарии:

1. Вы можете использовать некоторый синтаксический анализатор html, html не является допустимым xml.

Ответ №1:

Вы можете использовать org.w3c.dom.Document . Это синтаксический анализатор XML, и он уже включен в Java без каких-либо сторонних библиотек.

Вы можете превратить свой XML-файл в a 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 lt; 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 его, вы можете делать с ним все, что захотите.

Комментарии:

1. Я добавил этот фрагмент в свой код, где появляются ошибки, но он не работает полностью. Когда я попытался выполнить отладку, код не удалось выполнить в документе doc = builder.parse(xmlFile); строка без объяснения причин. Это не входит в цикл for.

2. Я проверил его с помощью вашего файла, и он действительно работает. Скорее всего, путь к файлу, который вы ввели, не может быть найден/ указан неверно. Укажите правильный путь.

Ответ №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)));