У меня есть некоторые проблемы, когда я использую if
заявления внутри for
цикла, чтобы удалить некоторые узлы в документе XML, потому что я не понимаю, почему мои счетчики стали 0 после поставить if
заявления:Java XPath «если» заявление
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document document = dbf.newDocumentBuilder().parse(new File("input3.xml"));
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
XPathExpression expres = xpath.compile("//TNMS/TPaths/TPath[Topology/LayerSet/NonTerminatedLayers/Layer='RS64']");
NodeList PathsCount = (NodeList) expres.evaluate(document, XPathConstants.NODESET);
System.out.println("Inicia el Borrado:");
for (int i = 0; i < PathsCount.getLength(); i++)
{
System.out.println(i);
XPathExpression exprueba = xpath.compile("/TNMS/TPaths/TPath[1]/Topology/LayerSet/TerminatedLayers");
NodeList Count = (NodeList) exprueba.evaluate(document, XPathConstants.NODESET);
System.out.println("Hay " + Count.getLength());
int countvar = Count.getLength();
XPathExpression expression = xpath.compile("//TNMS/TPaths/TPath[Topology/LayerSet/NonTerminatedLayers/Layer='RS64']");
Node b13Node = (Node) expression.evaluate(document, XPathConstants.NODE);
b13Node.getParentNode().removeChild(b13Node);
}
я вижу рядом с выходом:
Inicia el Borrado:
0
Hay 0
1
Hay 1
2
Hay 1
3
Hay 0
<?xml version="1.0" encoding="UTF-8" standalone="no"?><TNMS>
<TPaths>
</TPaths>
</TNMS>BUILD SUCCESSFUL (total time: 0 seconds)
Но когда я согласен с if
заявление:
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document document = dbf.newDocumentBuilder().parse(new File("input3.xml"));
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
XPathExpression expres = xpath.compile("//TNMS/TPaths/TPath[Topology/LayerSet/NonTerminatedLayers/Layer='RS64']");
NodeList PathsCount = (NodeList) expres.evaluate(document, XPathConstants.NODESET);
System.out.println("Inicia el Borrado:");
for (int i = 0; i < PathsCount.getLength(); i++)
{
System.out.println(i);
XPathExpression exprueba = xpath.compile("/TNMS/TPaths/TPath[1]/Topology/LayerSet/TerminatedLayers");
NodeList Count = (NodeList) exprueba.evaluate(document, XPathConstants.NODESET);
System.out.println("Hay " + Count.getLength());
int countvar = Count.getLength();
if (countvar == 1) {
XPathExpression expression = xpath.compile("//TNMS/TPaths/TPath[Topology/LayerSet/NonTerminatedLayers/Layer='RS64']");
Node b13Node = (Node) expression.evaluate(document, XPathConstants.NODE);
b13Node.getParentNode().removeChild(b13Node);
}
}
выход является следующим:
Inicia el Borrado:
0
Hay 0
1
Hay 0
2
Hay 0
3
Hay 0
и стирания не удалось.
Любые идеи?
Каков ваш ожидаемый результат? Код внутри оператора 'if' будет выполняться только в том случае, если' countvar' равно 1. Но что меняется 'countvar'? Это когда-нибудь меняется? – alondono
Пожалуйста, обратите внимание на отправку источника XML. Если проблема в ваших выражениях XPath, нет способа проверить это, не видя ваш источник XML. – sideshowbarker
Хорошо спасибо за ваши ответы, я не публиковал XML, потому что его так болото, чтобы поделиться ... но он работает над созданием новых методов. –