本文将介绍通过PHP在XML文件中添加新节点的详细情况,特别是关于php如何创建xml文件的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于c#–如何
本文将介绍通过PHP在XML文件中添加新节点的详细情况,特别是关于php如何创建xml文件的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于c# – 如何使用Linq to XML将XML保存在XML文件中?、dom4j解析xml文件,添加新节点,添加节点内容,读取文件中节点内容作为新增节点内容、Domj4读取XML文件--实现获取XML文件中所有的标签节点、duilib中添加自定义控件之后怎么能够在xml文件中配置使用的知识。
本文目录一览:- 通过PHP在XML文件中添加新节点(php如何创建xml文件)
- c# – 如何使用Linq to XML将XML保存在XML文件中?
- dom4j解析xml文件,添加新节点,添加节点内容,读取文件中节点内容作为新增节点内容
- Domj4读取XML文件--实现获取XML文件中所有的标签节点
- duilib中添加自定义控件之后怎么能够在xml文件中配置使用
通过PHP在XML文件中添加新节点(php如何创建xml文件)
我只是想问一个问题..如何使用PHP在xml中插入一个新节点.我的XML文件(questions.xml)如下所示
<?xml version="1.0" encoding="UTF-8"?>
<Quiz>
<topic text="Preparation for Exam">
<subtopic text="Science" />
<subtopic text="Maths" />
<subtopic text="english" />
</topic>
</Quiz>
我想添加一个带有“text”属性的新“subtopic”,即“geography”.我怎么能用PHP做到这一点?提前谢谢.
我的代码是
<?PHP
$xmldoc = new DOMDocument();
$xmldoc->load('questions.xml');
$root = $xmldoc->firstChild;
$newElement = $xmldoc->createElement('subtopic');
$root->appendChild($newElement);
// $newText = $xmldoc-> createTextNode(‘geology’);
// $newElement-> appendChild($newText);
$xmldoc->save('questions.xml');
?>
解决方法:
我会用SimpleXML.它看起来像这样:
// Open and parse the XML file
$xml = simplexml_load_file("questions.xml");
// Create a child in the first topic node
$child = $xml->topic[0]->addChild("subtopic");
// Add the text attribute
$child->addAttribute("text", "geography");
您可以使用echo显示新的XML代码,也可以将其存储在文件中.
// display the new XML code
echo $xml->asXML();
// Store new XML code in questions.xml
$xml->asXML("questions.xml");
c# – 如何使用Linq to XML将XML保存在XML文件中?
示例HTML:
<P><FONT color=#004080><U>Sample HTML</U></FONT></P>
保存在XML文件中:
<P><FONT color=#004080><U>Sample HTML</U></FONT></P>
当我手动编辑XML文件并输入所需的HTML时,Linq会拉入HTML并正确显示它.
以下是将HTML保存到XML文件的代码:
XElement currentReport = (from item in callReports.Descendants("callReport") where (int)item.Element("localId") == myCallreports.LocalId select item).FirstOrDefault(); currentReport.Element("studio").Value = myCallreports.Studio; currentReport.Element("visitDate").Value = myCallreports.Visitdate.ToShortDateString(); // *** The next two XElements store the HTML currentReport.Element("recomendations").Value = myCallreports.Comments; currentReport.Element("reactions").Value = myCallreports.Ownerreaction;
我假设这是发生了xml编码的b / c,但我不知道如何处理它. This question给了我一些线索……但没有答案(对我而言,至少).
谢谢您的帮助,
奥兰
解决方法
currentReport.Element("recomendations").ReplaceNodes(XElement.Parse(myCallreports.Comments));
编辑:您可能需要将用户输入的HTML包装在< div>中< / DIV>标签. XElement.Parse期望找到至少包含起始和结束xml标记的字符串.所以,这可能会更好:
currentReport.Element("recomendations").ReplaceNodes(XElement.Parse("<div>" + myCallreports.Comments + "</div>"));
然后你只需要确保像< br>这样的标签.正在< br />中发送.
编辑2:另一个选项是使用XML CDATA.用<![CDATA [和]]>包装HTML,但我从来没有实际使用过,我不确定它是如何影响读取xml的.
currentReport.Element("recomendations").ReplaceNodes(XElement.Parse("<![CDATA[" + myCallreports.Comments + "]]>"));
dom4j解析xml文件,添加新节点,添加节点内容,读取文件中节点内容作为新增节点内容
package org.dom4j.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import org.dom4j.Document;
import org.dom4j.Element;
import org.jaxen.function.SubstringBeforeFunction;
public class InsertNodeSwh {
private static String path = "F:\\项目是SVN\\40_源码";
public static void main(String[] args) {
Element element = null;
try {
File folder = new File(path);
//list()获取目录下所有文件
//list()获取目录下所有文件及目录的绝对路径
//使用增强for遍历目录下文件(批量处理xml文件)
for (File f : folder.listFiles()) {
System.out.println("获取文件:" + f);
//创建SAXReader,调用起read方法解析xml文件
SAXReader reader = new SAXReader();
//读取文件,获取document对象
Document document = reader.read(f);
//获取根节点
element = document.getRootElement();
System.out.println("根节点:" + element);
//获取XMLNode节点,截取需要的节点内容
String sElement1 = element.element("Property")
.element("XMLNode").getText();
System.out.println("ss1获取节点的内容:" + sElement1);
String ss1 = sElement1.substring(0, sElement1.indexOf("\\"));
System.out.println("ss1截取的内容:" + ss1);
System.out.println("**************************");
String sElement2 = element.element("Property")
.element("stdTableName").getText();
System.out.println("sElement获取节点的内容:" + sElement2);
System.out
.println("===================================================================================================");
//给根节点添加Property节点
Element brandElement = element.addElement("Property");
//给Property节点添加子节点
Element typeElement1 = brandElement.addElement("Name");
typeElement1.setText("定期期限");//添加节点内容
Element typeElement2 = brandElement.addElement("Level");
typeElement2.setText("1");
Element typeElement3 = brandElement.addElement("IsKey");
typeElement3.setText("0");
Element typeElement4 = brandElement.addElement("Key");
//typeElement4.setText("");
Element typeElement5 = brandElement.addElement("stdTableName");
typeElement5.setText(sElement2);
Element typeElement6 = brandElement.addElement("stdFieldName");
typeElement6.setText("N_DQQX");
Element typeElement7 = brandElement.addElement("stdType");
typeElement7.setText("Int");
Element typeElement8 = brandElement.addElement("stdLength");
//typeElement8.setText("");
Element typeElement9 = brandElement.addElement("XMLNode");
typeElement9.setText(ss1 + "定期期限");
Element typeElement10 = brandElement.addElement("DefaultValue");
//typeElement10.setText("");
Element typeElement11 = brandElement
.addElement("TranslateType");
//typeElement11.setText("");
Element typeElement12 = brandElement
.addElement("TranslateCondition");
//typeElement12.setText("");
Element typeElement13 = brandElement.addElement("PreCondition");
//typeElement13.setText("");
try {
Writer osWrite = new OutputStreamWriter(
new FileOutputStream(f));//创建输出流
OutputFormat format = OutputFormat.createPrettyPrint(); //获取输出的指定格式
format.setEncoding("UTF-8");//设置编码 ,确保解析的xml为UTF-8格式
XMLWriter writer = new XMLWriter(osWrite, format);//XMLWriter 指定输出文件以及格式
writer.write(document);//把document写入xmlFile指定的文件(可以为被解析的文件或者新创建的文件)
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception ex) {
ex.printStackTrace();
System.out.println(ex.getMessage());
}
}
}
Domj4读取XML文件--实现获取XML文件中所有的标签节点
Domj4读取XML文件--实现获取XML文件中所有的标签节点
contact.xml
Demo2.java
实现获取XML文件contact.xml中的所有节点
package gz.itcast.a_dom4j_read; import java.io.File; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.junit.Test; /* * 第二个dome4j读取XML文件内容的例子 * 节点 * 标签 * 属性 * 文本 */ public class Demo2 { /* * 得到节点信息 * */ @Test public void test1() throws Exception{ SAXReader reader = new SAXReader(); Document doc = reader.read(new File("./src/contact.xml")); //nodeIterator:得到当前节点下的所有子节点对象(不包含孙节点以下的节点) Iterator<Node> it = doc.nodeIterator(); while(it.hasNext()){ Node node = it.next();//取出元素 String name = node.getName();//得到结点名称 System.out.println(name); //继续取出其下面的子节点 //自由标签节点才有子节点 //判断当前节点是否是标签节点 if(node instanceof Element){ Element elem = (Element)node; Iterator<Node> it2 = elem.nodeIterator(); while(it2.hasNext()){ Node n2 = it2.next(); System.out.println(n2.getName()); } } } } /* * 遍历XML文档的所有节点 */ @Test public void test2() throws Exception{ //读取XML文档,返回Document对象 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("./src/contact.xml")); //得到根标签 Element rooElem = doc.getRootElement(); getChildNodes(rooElem); } /* * 获取传入的标签下的所有子节点 */ private void getChildNodes(Element elem) { System.out.println(elem.getName()); //得到子节点 Iterator<Node> it = elem.nodeIterator(); while(it.hasNext()){ Node node = it.next(); //判断是否是标签节点 if(node instanceof Element){ Element el = (Element)node; //递归取下面的所有节点 getChildNodes(el); } } } }
duilib中添加自定义控件之后怎么能够在xml文件中配置使用
添加自定义控件可能有两种不同的情况:
1、 在duilib库中添加的自定义控件。
2、 在我们的应用程序中自己重写了一个控件。
下面开始讲解不同的情况下怎么才能支持在xml文件配置控件:
1、 库中情况
假如自定义的控件是CGifUI类。
库中情况相对是比较简单的,只需在分析xml文件时候将控件创建出来就行了,所以我找到的函数是CControlUI* CDialogBuilder::_Parse(cmarkupNode* pRoot,CControlUI* pParent,175)">CPaintManagerUI* pManager)。这个函数中添加如下的代码:
SIZE_T cchLen = _tcslen(pstrClass);
switch( cchLen ) {
case 3:
if (_tcscmp(pstrClass,DUI_CTR_GIF) == 0) pControl = new CGifUI;
// 下面这个宏定义就是xml中配置的配置项对应
#defineDUI_CTR_GIF (_T("Gif"))
2、 库外情况
假如自定义控件是CTransportTaskLayout类
库外的情况,可能就麻烦一些了。首先我们在加载xml文件的时候要调用下面的函数:
CControlUI* Create(STRINGorID xml,
LPCTSTR type = NULL,
IDialogBuilderCallback* pCallback = NULL,
CPaintManagerUI* pManager =
在这个函数中和此处有关的参数就是IDialogBuilderCallback* pCallback。
首先要明确一点是这个控件是在duilib中不能被接受的,所以只能在外宅里养着了。至于怎么养让我下面给你细细的说来。虽然说家里面是不接受的,但是我们自己必须接受这个事实,所以我们必须想办法解决这个问题,那就会从上面的那个参数开始着手了,我看CDialogBuilder::_Parse这个函数可以知道,如果在原有的duilib库中不接受这种控件类型,会一直到函数的后面调用pControl = m_pCallback->CreateControl(pstrClass);
,这里就给我们给外宅转正的机会了,所以我们自己会可以重写一个IDialogBuilderCallback类,然后重写类里的CreateControl函数,创建我们自己新控件了。下面给出在项目中用到的代码:
class CTransportTaskBuilderCallBack : public IDialogBuilderCallback
{
public:
CTransportTaskBuilderCallBack(){};
virtual CControlUI* CreateControl(LPCTSTR pstrClass)
{
if (_tcscmp(pstrClass,21)">"TransportTaskLayout")) == 0)
{
CTransportTaskLayout * pLayout = (CTransportTaskLayout*)g_TransportListUICenter->CreateLayoutInstance("TransportTaskLayout"));
return pLayout;
}
return NULL;
}
};
上面这个类就是如果在xml文件中发现了"TransportTaskLayout"字符串,就会创建CTransportTaskLayout类的对象。
到这里外宅已经被转正了。现实生活中就没有这么美的事了,要转正是会出人命的。
关于通过PHP在XML文件中添加新节点和php如何创建xml文件的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于c# – 如何使用Linq to XML将XML保存在XML文件中?、dom4j解析xml文件,添加新节点,添加节点内容,读取文件中节点内容作为新增节点内容、Domj4读取XML文件--实现获取XML文件中所有的标签节点、duilib中添加自定义控件之后怎么能够在xml文件中配置使用的相关信息,请在本站寻找。
本文标签: