`

How to set a value in a xmlcontent resource

阅读更多

我引用两个老外的代码来说明问题:

如果你使用这一段代码,试图改变一个xmlcontent的内容的话,你不会成功

CmsResource document = (CmsResource) cms.getCmsObject().readResource(xmlcontentPath);

CmsXmlContent xmlContent = CmsXmlContentFactory.unmarshal(cms.getCmsObject(), document, request);

xmlContent.getValue("Date", cms.getRequestContext().getLocale()).setStringValue(cms.getCmsObject(), String.valueOf(Calendar.getInstance(new java.util.Locale("es")).getTimeInMillis()));

cms.getCmsObject().writeFile(xmlContent.getFile());

为什么?因为你必须先把修改好的xmlcontent的字节码重新写回到CmsFile对象里面去:

//you need to insert a line like this before you write the XML content:
//The reason is that the underlying file object of the XML content is not automatically updated when you modify the XML content values.

xmlContent.getFile().setContents(xmlContent.marshal());

 不过根据我实践的结果,光是这一点还不够,你在修改文件前,还要锁定文件:

/* lock this xmldoc, must be done before save */
			cmsobject.lockResource(fileName);

如果还是报can not read resource的异常,八成是你的siteroot不对,这时在程序最前面加上:

/* set site root is important before read xml doc, or you can not read resource from '/' */
		cmso.getRequestContext().setSiteRoot("/");

  

老外讨论的原文:http://www.nabble.com/How-to-set-a-value-in-a-xmlcontent-resource-td13809143.html

 

 

 

 

 

分享到:
评论
2 楼 cai555 2008-03-21  
原来你就是那个燕子钨,呵呵
1 楼 wangyi878750 2008-03-21  
操作任何文件之前,必须先得到所,才有可能进行操作。

相关推荐

    unity 读取xml

    一旦XML文件被加载,我们可以使用Linq-to-XML API来解析XML元素和属性。例如,假设我们的XML配置文件如下: ```xml <Item id="1" name="Item1" value="100"/> <Item id="2" name="Item2" value="200"/> ``` ...

    Oracle XML DB之浅入浅出

    UPDATE XMLTable X SET VALUE(X) = XMLType(getCLOBDocument('init.xml')); UPDATE XMLContent SET xmlValue = XMLType(getCLOBDocument('init.xml')) WHERE keyValue = '1'; ``` 注意,这里 `VALUE(X)` 是针对 ...

    Unity3d中可用的,解析XML文件的Mono工具

    Debug.Log($"Name: {item.Name}, Value: {item.Value}"); } ``` 总之,Unity3D中的Mono工具通过`System.Xml`提供了XML解析能力,让开发者能够方便地读取、操作XML文件中的数据。无论是使用传统的`XmlDocument`还是...

    Xml转换为集合list实例代码.rar

    foreach (XmlNode node in nodes) { var user = new User { Name = node.SelectSingleNode("Name").InnerText, Age = int.Parse(node.SelectSingleNode("Age").InnerText) }; users.Add(user); } return ...

    PHP二维数组形成XML内容形式

    array_to_xml($value, $doc, $childNode); } else { $childNode = $doc->createElement(is_int($key) ? 'item' : $key, $value); $rootNode->appendChild($childNode); } } } ``` 这个`array_to_xml`函数递归...

    QTP操作xml文件方法

    xmlContent = xmlFile.ReadAll '读取整个文件内容 xmlFile.Close '写入XML文件 Set xmlFile = fileObj.CreateTextFile("C:\new_example.xml", True) xmlFile.WriteLine "<root><element>Value</element></root>" ...

    silverlight读取xml生成菜单

    _menuItems = value; OnPropertyChanged(nameof(MenuItems)); } } public void LoadMenuFromXml(string filePath) { var xmlContent = File.ReadAllText(filePath); MenuItems = Menu.ParseXml(xmlContent)...

    xml/Json转换工具类

    public static String xmlToJson(String xmlContent) throws IOException { ObjectMapper xmlMapper = new XmlMapper(); return xmlMapper.writeValueAsString(xmlMapper.readTree(xmlContent)); } // 如果...

    C#开发的读取 xml自定义控件 可使节点关键字变色

    int index = this.Text.IndexOf(match.Value, StringComparison.OrdinalIgnoreCase); if (index != -1) { int start = index; int end = start + match.Length; this.Select(start, end - start); this....

    dom4j解析xml,利用反射机制

    student.setId(studentElement.attributeValue("id")); student.setName(studentElement.elementText("name")); student.setAge(Integer.parseInt(studentElement.elementText("age"))); // 反射部分 Class<?>...

    XML操作又一例 你所看到的文件来自:E动天下—VB专业源码网

    xmlDoc.Load "path_to_your_xml_file.xml" ``` 之后,可以通过`xmlDoc.getElementsByTagName`或`xmlDoc.SelectSingleNode`等方法遍历和修改XML结构。 2. **XMLHttpRequest对象**: 这个对象允许异步地发送HTTP...

    示例使用 XML 规范及 .net XML 解析 Office Execl 2007......

    XDocument是LINQ to XML的一部分,它提供了一种更现代且更易用的方式来操作XML。通过LINQ查询,我们可以轻松地找到并打印出所有工作表的名称和ID。 要写入或修改数据,你需要找到对应的工作表XML文件,如"sheet1....

    Android 生成和PULL解析xml

    parser.setInput(inputStream, null); // 定义解析过程 int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG) { String tag...

    Dom4J解析XML源代码

    String xmlContent = "<root><element attr='value'>Text</element></root>"; Document document = DocumentHelper.parseText(xmlContent); ``` 2. **获取根元素**:通过`document.getRootElement()`获取XML文档的...

    Xml反序列化

    string xmlContent = File.ReadAllText("path_to_xml_file.xml"); XmlSerializer serializer = new XmlSerializer(typeof(PowerConfig)); PowerConfig powerConfig = (PowerConfig)serializer.Deserialize(new ...

    Android解析xml的三种方法

    parser.setInput(new StringReader(xmlContent)); int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG) { // 处理开始...

    Python库 | tika-1.13.tar.gz

    metadata = parser.from_file('path_to_your_file', xmlContent=False) for key in metadata: print(f"{key}: {metadata[key]}") # 文件类型检测 file_type = parser.detect('path_to_your_file') print(f"File ...

    pull解析器的使用

    parser.setInput(new StringReader(xmlContent)); int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG && parser.getName...

    Asp.net 操作XML 源码

    Console.WriteLine(iterator.Current.Value); } } ``` **4. 修改XML** `XmlElement`和`XmlNode`提供了一系列方法来添加、删除和修改XML元素及属性。例如,要添加一个新节点: ```csharp XmlElement newNode = ...

    抓取网络xml

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder content = new StringBuilder(); String inputLine; while ((inputLine = in.readLine()) != null) { ...

Global site tag (gtag.js) - Google Analytics