按位置删除元素
remove element by position
我有一个 xml,它有一组简单的数据。
此数据以简单的 table 显示,并且根据 xml 中的位置为每一行数据分配一个 table 中的 ID(<xsl:value-of select="position()"
/>)。我无法为数据添加 id 属性,因为它不是我的数据,但我需要根据这个位置定位元素并删除它们。
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() {
}
}
此代码没有删除正确的数据。有人知道如何通过位置找到根元素的子元素吗?
@rolfl
int index = Integer.parseInt(delete);
Element root = xml_document.getRootElement();
root.getChildren().remove(index);
这不会删除任何元素。
你这里的问题是进程正在获取要作为字符串删除的索引,然后调用 removeChild(String)
方法....查找元素标记名称为的第一个子项索引中的任何(字符串)值。
相反,您想要做的是将索引转换为 int,然后将根的子项视为列表....类似:
int index = Integer.parseInt(request.getParameter("delete"));
root.getChildren().remove(index);
请参阅 getChildren()
的文档。
这就是我让它工作的方式。不确定它是否是一个很好的解决方案,但它确实有效。
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;
}
}
如果有人可以更新此内容以显示更简单的删除元素的方法,请这样做。感觉必须有一种更简单的方法来分离元素而无需迭代。无论如何,正如我所说的那样有效。
我有一个 xml,它有一组简单的数据。
此数据以简单的 table 显示,并且根据 xml 中的位置为每一行数据分配一个 table 中的 ID(<xsl:value-of select="position()"
/>)。我无法为数据添加 id 属性,因为它不是我的数据,但我需要根据这个位置定位元素并删除它们。
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() {
}
}
此代码没有删除正确的数据。有人知道如何通过位置找到根元素的子元素吗?
@rolfl
int index = Integer.parseInt(delete);
Element root = xml_document.getRootElement();
root.getChildren().remove(index);
这不会删除任何元素。
你这里的问题是进程正在获取要作为字符串删除的索引,然后调用 removeChild(String)
方法....查找元素标记名称为的第一个子项索引中的任何(字符串)值。
相反,您想要做的是将索引转换为 int,然后将根的子项视为列表....类似:
int index = Integer.parseInt(request.getParameter("delete"));
root.getChildren().remove(index);
请参阅 getChildren()
的文档。
这就是我让它工作的方式。不确定它是否是一个很好的解决方案,但它确实有效。
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;
}
}
如果有人可以更新此内容以显示更简单的删除元素的方法,请这样做。感觉必须有一种更简单的方法来分离元素而无需迭代。无论如何,正如我所说的那样有效。