我有以下XML:
<person xmlns:a="http://example.com" xmlns:b="http://sample.net">
<a:fName>John</a:fName>
<a:lName>Wayne</a:lName>
<b:age>37</b:age>
</person>
Run Code Online (Sandbox Code Playgroud)
如何在类上定义XML序列化属性以支持所描述的场景?
我正在使用jQuery ajax加载器加载一个xml文件,并需要将其转换为字符串,以便我可以使用PHP post变量再次保存它.做这个的最好方式是什么?
<script type='text/javascript'>
jQuery.ajax({
type: "GET",
url: "data.xml",
dataType: "xml",
success: parseXML
});
function parseXML(xml) {
var xml_string = jQuery(xml).text(); // (This doesn't work- returns tagless, unformatted text)
alert(xml_string);
}
</script>
Run Code Online (Sandbox Code Playgroud) 假设我有一堂课;
public class Car
{
public List<Passenger> Passengers {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我想将其序列化为XML,以便乘客是Car的子节点,并且没有介入的Passengers节点.换句话说,我希望输出看起来像这样;
<Car>
<Passenger>...</Passenger>
<Passenger>...</Passenger>
</Car>
Run Code Online (Sandbox Code Playgroud)
而不是这样,这是默认布局;
<Car>
<Passengers>
<Passenger>...</Passenger>
<Passenger>...</Passenger>
</Passengers>
</Car>
Run Code Online (Sandbox Code Playgroud)
有一个属性我需要添加到Car.Passengers来实现这一点,我不记得哪个.
我有一个使用JAXB编组为XML的Object.一个元素包含一个包含引号(")的String.生成的XML具有""存在的位置.
即使这通常是首选,我需要我的输出匹配遗留系统.如何强制JAXB不转换HTML实体?
-
感谢您的答复.但是,我从未看到处理程序escape()被调用.你能看一看,看看我做错了什么吗?谢谢!
package org.dc.model;
import java.io.IOException;
import java.io.Writer;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.dc.generated.Shiporder;
import com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler;
public class PleaseWork {
public void prettyPlease() throws JAXBException {
Shiporder shipOrder = new Shiporder();
shipOrder.setOrderid("Order's ID");
shipOrder.setOrderperson("The woman said, \"How ya doin & stuff?\"");
JAXBContext context = JAXBContext.newInstance("org.dc.generated");
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.setProperty(CharacterEscapeHandler.class.getName(),
new CharacterEscapeHandler() {
@Override
public void escape(char[] ch, int start, int length,
boolean isAttVal, Writer out) throws IOException {
out.write("Called …Run Code Online (Sandbox Code Playgroud) 例如,我有一个导入另一个模式的简单模式.第二个模式(urn:just:attributes,just-attributes.xsd)只定义了一个属性组.
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/MySchema"
xmlns:tns="http://www.example.org/MySchema"
elementFormDefault="qualified"
xmlns:ja="urn:just:attributes">
<import schemaLocation="just-attributes.xsd" namespace="urn:just:attributes"/>
<element name="MyElement">
<complexType>
<attributeGroup ref="ja:AttributeGroup"/>
</complexType>
</element>
</schema>
Run Code Online (Sandbox Code Playgroud)
我正在使用Metro xjc Ant任务来生成此模式的类.我遇到的问题是我正在与之交互的第三方应用程序是名称空间特有的.这种情况我需要一个String值,所以我必须序列化它.我使用样板代码.
private static <T> String marshal(T object) throws JAXBException{
OutputStream outputStream = new ByteArrayOutputStream();
JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(object, outputStream);
return outputStream.toString();
}
Run Code Online (Sandbox Code Playgroud)
这给了我一些东西
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:MyElement xmlns:ns1="urn:just:attributes" xmlns:ns2="http://www.example.org/MySchema" ns1:attrib1="1234" ns1:attrib2="5678"/>
Run Code Online (Sandbox Code Playgroud)
我xmlns:thirdpartyns="urn:just:attributes"遇到的问题是这个第三方需要类似的东西,也就是说,它们是根据命名空间的名称进行解析.它已经是"thirdpartyns"为他们的软件工作.
有没有人知道如何解决这个问题,而不是在结果字符串中进行查找和替换?也许是自定义绑定规则?
我有以下课程
[XmlRoot]
public class AList
{
public List<B> ListOfBs {get; set;}
}
public class B
{
public string BaseProperty {get; set;}
}
public class C : B
{
public string SomeProperty {get; set;}
}
public class Main
{
public static void Main(string[] args)
{
var aList = new AList();
aList.ListOfBs = new List<B>();
var c = new C { BaseProperty = "Base", SomeProperty = "Some" };
aList.ListOfBs.Add(c);
var type = typeof (AList);
var serializer = new XmlSerializer(type);
TextWriter w = …Run Code Online (Sandbox Code Playgroud) 我的Python应用程序当前使用python-memcached API来设置和获取memcached中的对象.此API使用Python的本机pickle模块来序列化和反序列化Python对象.
这个API使得在memcached中存储嵌套的Python列表,字典和元组变得简单快捷,将这些对象读回应用程序是完全透明的 - 它只是起作用.
但我不想仅限于使用Python,如果所有的memcached对象都是用pickle序列化的,那么用其他语言编写的客户端将无法工作.
以下是我考虑过的跨平台序列化选项:
考虑到这个应用程序的优先级,memcached的理想对象序列化方法是什么?
python serialization memcached xml-serialization protocol-buffers
我有代码XmlSerializer用于序列化/反序列化数据结构的持久性.我在StackOverflow上的几个地方读过和听过的XmlSerializer是以下一个或多个:
我的问题是双重的; 以上是否属实,若有,有哪些替代方案?就我的目的而言,XML工作得非常好,我希望保持这种不变,但其他一切都可以改变.
编辑:如果你想建议XML的其他东西,我会接受它,但它确实需要人类可读.
我知道我们可以按照MSDN上所述的members-collection中的顺序强制生成类中的成员.但是,我寻找一些代码,它们还添加了一个序列化属性,提供了这些成员的顺序.所以这就是我希望生成器创建的内容:
class MyClass
{
[XmlElement("TheProperty", Order = 0]
public int MyProperty { get; set; }
[XmlElement("AnotherProperty", Order = 1]
public int AnotherProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
目前,我有一种方法可以循环DOM中所有类型的成员,并将该属性附加到CustomAttributescurrent(public)属性或字段的-member .
var types = code.Types.Cast<CodeTypeDeclaration>().Where(x => !x.IsEnum);
foreach (var members in types.Select(x => x.Members.Cast<CodeTypeMember>()))
{
int i = 0;
var propertiesAndFields = members.Where(x => (
x.Attributes & MemberAttributes.Private) != MemberAttributes.Private
&& (x is CodeMemberField || x is CodeMemberProperty));
foreach (CodeTypeMember member in propertiesAndFields)
{
var attr …Run Code Online (Sandbox Code Playgroud) 我试图反序列化这个简单的Web服务的响应
我使用以下代码:
WebRequest request = WebRequest.Create("http://inb374.jelastic.tsukaeru.net:8080/VodafoneDB/webresources/vodafone/04111111");
WebResponse ws = request.GetResponse();
XmlSerializer s = new XmlSerializer(typeof(string));
string reponse = (string)s.Deserialize(ws.GetResponseStream());
Run Code Online (Sandbox Code Playgroud)