#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)));