我正在尝试在XML中搜索多个属性:
<APIS>
<API Key="00001">
<field Username="username1" UserPassword="password1" FileName="Filename1.xml"/>
<field Username="username2" UserPassword="password2" FileName="Filename2.xml"/>
<field Username="username3" UserPassword="password3" FileName="Filename3.xml"/>
</API>
</APIS>
Run Code Online (Sandbox Code Playgroud)
我需要检查在"字段"中Username和UserPassword值是否与我的数据集值进行比较,是否有一种方法可以检查多个属性(AND条件)而无需编写自己的使用Flags和破坏的逻辑没有循环.
是否有XMLDoc的内置函数可以做到这一点?任何帮助,将不胜感激!
XmlElement具有"Order"属性,您可以使用该属性在使用XmlSerializer进行序列化时指定属性的精确顺序(无论如何相互关联).
XmlAttribute是否有类似的东西?我只是想从类似的东西设置属性的顺序
public class bookingList
{
[XmlElement(Order = 1)]
public string error { get; set; }
[XmlElement(Order = 2)]
public int counter { get; set; }
[XmlElement(ElementName = "booking", Order = 3)]
public List<booking> bookings = new List<booking>();
}
Run Code Online (Sandbox Code Playgroud)
至
<MyType end="bob" start="joe" />
Run Code Online (Sandbox Code Playgroud)
这只是为了可读性,真的是我自己的利益.
我有一个这样的课:
public class Level
{
[XmlAttribute]
public string Guid { get; set; }
}
public class LevelList : List<Level>
{
}
public class Test
{
public LevelList CalLevelList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用XmlSerializer,我得到如下输出:
<CalLevelList>
<Level Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/>
<Level Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/>
</CalLevelList>
Run Code Online (Sandbox Code Playgroud)
这在技术上是正确的.但是,在不更改类名的情况下,我想使输出看起来像这样:
<Levels>
<L Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/>
<L Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/>
</Levels>
Run Code Online (Sandbox Code Playgroud)
我知道这可以通过属性完成,但无法弄清楚如何.当我向Test类添加一个属性时,如下所示:
public class Test
{
[XmlElement("Levels")]
public LevelList CalLevelList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
输出非常令人惊讶:
<Levels Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/>
<Levels Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/>
Run Code Online (Sandbox Code Playgroud)
这意味着,我丢失了父节点.我指定的元素名称成为节点名称.为什么这个?如何使它工作?
我有一个XML文件,它需要一个元素中的3个属性.如何按照我的意愿制作街道,拉链和城市属性的顺序?
<address street="Big Street" zip="2012" city="Austin">
</address>
Run Code Online (Sandbox Code Playgroud)
@XmlType(name="Street)
@XmlRootElement(name = "Street")
public class Street {
@XmlAttribute
private String name;
@XmlAttribute
private String type;
... set and get method
}
Run Code Online (Sandbox Code Playgroud) 我正在使用包含类似于此的结构的XML文档:
<MT>
<Events>
<event id="1">
<field name="blah" value="a_value" type="atype" />
.
.
.
</event>
</Events>
</MT>
Run Code Online (Sandbox Code Playgroud)
我目前正以这种方式将文件从文件加载到XML文档中:
XmlDocument xdoc = new XmlDocument();
xdoc.Load("somefile.xml"); //Successfully loads btw
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行下一行代码时,我遇到了一个问题,只有这个特定的文档:
xdoc.SelectSingleNode("//event[@id='1']"); //This returns a null
Run Code Online (Sandbox Code Playgroud)
我是否在正确的轨道上猜测这是因为使用名为'id'的属性的问题或者我在代码中遗漏了某些内容而返回null?
我正在学习自定义组件,我在使用自定义xml属性时遇到了一些麻烦.
我的自定义组件扩展了LinearLayout,在构造函数(public Custom(Context context, AttributeSet attrs))中我正在膨胀xml布局(2个按钮和1个EditText).
我也在values/attrs这个自定义属性中声明:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Custom">
<attr name="initValue" format="integer" />
<attr name="stepSize" format="integer" />
<attr name="maxValue" format="integer"/>
</declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)
在我膨胀布局后的构造函数中,我正在尝试读取这样的自定义属性:
if (attrs != null) {
TypedArray ta = context.obtainStyledAttributes(attrs,
R.styleable.Custom, 0, 0);
setInitValue(ta.getInt(R.styleable.Custom_initValue, 0));
setStepSize(ta.getInt(R.styleable.Custom_stepSize, 1));
setMaxValue(ta.getInt(R.styleable.Custom_maxValue, 5));
ta.recycle();
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试通过将其添加到xml布局来测试此自定义组件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<here.is.my.package.Custom android:id="@+id/add"
android:layout_width="wrap_content" android:layout_height="wrap_content"
initValue="2" maxValue="7" stepSize="1" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这不起作用,我只得到默认值(0,1,5).我错过了什么或这是正常的行为?
根据这个问题:
XML属性中的换行符完全有效(尽管可能不推荐):
<xmltag1>
<xmltag2 attrib="line 1
line 2
line 3">
</xmltag2>
</xmltag1>
Run Code Online (Sandbox Code Playgroud)
当我使用LINQ to XML(System.Xml.Linq)解析这样的XML时,这些换行符将以静默方式转换为空格' '字符.
有没有办法告诉XDocument.Load()解析器保留这些换行符?
PS:我正在解析的XML是由第三方软件编写的,因此我无法改变换行符的写入方式.
我需要能够创建一个如下所示的XML Document:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rootprefix:rootname
noPrefix="attribute with no prefix"
firstprefix:attrOne="first atrribute"
secondprefix:attrTwo="second atrribute with different prefix">
...other elements...
</rootprefix:rootname>
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
XmlDocument doc = new XmlDocument();
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
doc.AppendChild(declaration);
XmlElement root = doc.CreateElement("rootprefix:rootname", nameSpaceURL);
root.SetAttribute("schemaVersion", "1.0");
root.SetAttribute("firstprefix:attrOne", "first attribute");
root.SetAttribute("secondprefix:attrTwo", "second attribute with different prefix");
doc.AppendChild(root);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到的带有第二个前缀的第二个属性根本没有前缀.它只是"attrTwo" - 就像schemaVersion属性一样.
那么,有没有办法在C#的根元素中为属性设置不同的前缀?
我使用 jQuery 通过 document.createElement 函数动态创建 XML 文档。这对于创建结构非常有用,因为我能够利用 .appendTo 函数以正确的顺序动态放置正确的节点。当我设置我创建的元素的属性时,问题就出现了。一旦它们被创建,它们就会被设置为小写并且永远不会保留它们的大小写。这是不可接受的,因为属性将与下游的预期格式不匹配。
我尝试通过连接字符串来动态创建 XML 文档,但这不起作用,因为节点可以嵌套。
有什么方法可以使用 createElement 方法来保留每个属性的大小写吗?
我有一个这样定义的类:
[XmlRoot(ElementName="request")]
public class Request
{
#region Attributes
[XmlAttribute(AttributeName = "version")]
public string Version
{
get
{
return "1.0";
}
}
[XmlAttribute(AttributeName = "action")]
public EAction Action
{
get;
set;
}
#endregion
Run Code Online (Sandbox Code Playgroud)
但是当我序列化它时,"version"不会出现在属性中(而"action"会出现).
出了什么问题?
xml-attribute ×10
xml ×6
c# ×4
.net ×2
android ×1
c#-4.0 ×1
html ×1
jaxb ×1
jquery ×1
linq-to-xml ×1
search ×1
typedarray ×1
xml-layout ×1
xmldocument ×1