我有一个xml,它有一组简单的数据。
此数据显示在一个简单的表中,并根据xml中的位置为表中的每一行数据分配一个ID(Daily Summary: b'No precipitation throughout the week, with temperatures rising to 82\xc2\xb0F on Tuesday.'
/> )。我无法为数据添加id属性,因为它不是我的数据,但我需要根据此位置定位元素并将其删除。
<xsl:value-of select="position()"
}
此代码不会删除正确的数据。任何人都知道如何根据其位置找到根元素的子元素?
@rolfl
public class Delete extends HttpServlet {
private final String XML_FILE = "data.xml";
public void init() throws ServletException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Disable browser caching
response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
String index = request.getParameter("delete");
try {
// Load the current data.xml
SAXBuilder builder = new SAXBuilder();
Document xml_document = builder.build(new File(getServletContext().getRealPath("/") + XML_FILE));
Element root = xml_document.getRootElement();
root.removeChild(index);
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
outputter.output(xml_document, new FileWriter(getServletContext().getRealPath("/") + XML_FILE));
}
catch(Exception ex) {}
// Once we have processed the input we were given
// redirect the web browser to the main page.
response.sendRedirect("/");
}
public void destroy() {
}
这不会删除任何元素。
答案 0 :(得分:1)
你的问题是,进程是将索引作为字符串删除,然后调用removeChild(String)
方法....它查找具有元素标记名称的第一个子节点( string)值在索引中。
你想要做的是将索引转换为int,然后将root的子节点视为List ......如下所示:
int index = Integer.parseInt(request.getParameter("delete"));
root.getChildren().remove(index);
请参阅getChildren()
的文档。
答案 1 :(得分:0)
这就是我开始工作的方式。不确定它是否是一个很好的解决方案,但它确实有效。
SAXBuilder builder = new SAXBuilder();
Document xml_document = builder.build(new File(getServletContext().getRealPath("/") + XML_FILE));
// Get root element
Element root = xml_document.getRootElement();
// Create a list of the children of the root element
List<Element> kids = root.getChildren();
// Interate through list of elements and delete (detach) the element at position index.
int i = 1;
for (Element element : kids)
{
if(i == index)
{
element.detach();
break;
}
else
{
i = i + 1;
}
}
我用
获得了根元素Element root = xml_document.getRootElement();
使用
列出了它的子元素List<Element> kids = root.getChildren();
然后遍历此列表,直到我到达要删除的元素的索引,然后对此元素执行.detach
int i = 1;
for (Element element : kids)
{
if(i == index)
{
element.detach();
break;
}
else
{
i = i + 1;
}
}
如果有人可以更新此内容以显示删除元素的更简单方法,请执行此操作。感觉就像必须有一种更简单的方法来分离元素而不进行迭代。无论如何,正如我说的那样有效。