我正在尝试将nodeList
包含的节点另存XML
为新文件,这是获取新XML
文档并拆分为更小的节点列表XMLs
:
public void split(Document inDocument) throws ParserConfigurationException,
SAXException, IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
SaveXML savePerJob = new SaveXML();
// Load the input XML document, parse it and return an instance of the
// Document class.
Document document = inDocument;
//all elements
//jobs
NodeList nodes = document.getDocumentElement().getChildNodes();
NodeList jobs = nodes.item(7).getChildNodes();
for(int j =0; j<jobs.getLength(); j++){
Node itm = jobs.item(j);
String itmName = itm.getFirstChild().getNodeName();
String itmID = itm.getFirstChild().getTextContent();
System.out.println("name: " + itmName + " value: " + itmID);
//here I want to save the node as a new .xml file
}
}
输出是一个很长的列表,例如:
name: id value: 9496425
现在,我想将该节点另存itm
为新的新.xml
文件,但是我没有找到按原样返回该节点的函数。谢谢。
您可以将节点转换为字符串,然后将此字符串保存到.xml
文件中。
下面的方法会将节点转换为xml字符串。这是仅JDK的解决方案,不需要依赖项。
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.StringWriter;
public static String toString(Node node, boolean omitXmlDeclaration, boolean prettyPrint) {
if (node == null) {
throw new IllegalArgumentException("node is null.");
}
try {
// Remove unwanted whitespaces
node.normalize();
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("//text()[normalize-space()='']");
NodeList nodeList = (NodeList)expr.evaluate(node, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); ++i) {
Node nd = nodeList.item(i);
nd.getParentNode().removeChild(nd);
}
// Create and setup transformer
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
if (omitXmlDeclaration == true) {
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
}
if (prettyPrint == true) {
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
}
// Turn the node into a string
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(node), new StreamResult(writer));
return writer.toString();
} catch (TransformerException e) {
throw new RuntimeException(e);
} catch (XPathExpressionException e) {
throw new RuntimeException(e);
}
}
问题内容: 在过去的几天里,尝试使其正常工作时遇到了麻烦。但是我想要的是我们有一个可以通过网络发送原始数据的应用程序。然后,我读入此二进制数据并将其保存到wav(任何音频)文件中。稍后可以查看压缩。 所以有问题的代码: 也尝试过使用上述声明,但是我得到了例外:。因此,我认为正在发生的事情是因为我的流是原始音频数据,并且没有wave报头,所以抛出异常? 该文件确实可以成功写入,但是它都是静态的,是否
最后重要的一点是,我要创建的这些节点本身可能有几个属性。因此,为了保持上面的例子,它可能是每个作者的出生日期和地点列出。 任何建议都很感激。
所以我有一个如下的xml文件: 并有另一个xml文件,如下所示: 使用xslt,如何将第二个文件中的两个元素添加到第一个文件中的student元素中?换句话说,如何创建如下所示的文件: 如果使用xslt是不可能的,那么使用XPath是可行的吗? 非常感谢!
问题内容: 我有一个XML文件(在左侧),我想创建多个文件(在右侧): 我试图从原始XML文件中获取第一个子节点,并将其添加到新的子节点,但是在替换节点时,我一直遇到错误。 我想做类似以下的事情 但我得到一个错误 指出正确方向的任何帮助表示赞赏! 问题答案: 根据Java文档, 使用cloneNode方法。 摘要: 返回此节点的副本,即用作节点的通用副本构造函数。复制节点没有父节点。(parent
问题内容: 我正忙于将文字处理程序作为我的项目之一,我需要将输入jTextArea的文本另存为.txt文件,并带有用户选择的名称和位置。注意“ fc”是我已经声明的文件选择器的名称。 问题答案: 我将使用JTetArea自己的write方法,因为这将使写入文件变得容易,并将很好地处理所有换行。例如(并借用您的代码): 您的代码中有一些错误。例如,这可行
问题内容: 这是我需要帮助的功能: 原版的: 通缉: 问题答案: 以下完整示例将从当前目录中读取 现有 文件,追加新服务器,然后将文件重写为。没有现有的.xml文件,该功能将无法正常运行,因此您需要修改代码以处理这种情况。 示例 server.xml 文件: 对代码的主要更改是 未 创建新的“ root”元素。上面的示例仅使用现有节点中的当前根节点,然后追加一个新的 Server 元素并重新写入该