我经常在XML模式文件中看到类似下面的代码.据我所知,xmlns是定义一个新的命名空间.但是,跟随xmlns的长URL是否真的有必要?我的意思是程序,解析器,还是真正调用的,例如"http://www.springframework.org/schema/beans"?或者这条线就像这样:
<beans xmlns="beansNamespace">
Run Code Online (Sandbox Code Playgroud)
这是其中之一
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
"
>
Run Code Online (Sandbox Code Playgroud) 页面w3schools 将以下内容作为一种模式声明形式.
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
...
...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
这里,
targetNamespace定义了正在定义的XML文档的名称空间 - 可以在"this"XSD中定义的XML文档中使用哪些标记(元素)和哪些属性.
xmlns=http://www.w3schools.com/schema/schema_schema.asp
Run Code Online (Sandbox Code Playgroud)
另一方面,正在为XML文档中的名称定义默认名称空间 - 那些未在"this"XSD(?)上定义的名称,因此,解析器首先查找targetNamespace中声明的名称空间.如果它找不到那里的名字,继续尝试下一个xmlns(?)
如果我跳过上面架构声明中的targetNamespace属性,我究竟会错过什么?虽然我有xmlns,但targetNamespace对我来说是多余的,因为它们指的是同一个命名空间.
我错过了什么?
注意:我已经看到XML中的"xmlns"是什么意思?在其他一些讨论中.
我用谷歌搜索,但找不到我想要的东西.我有几个问题......
这是我的代码结构:
我的命令类:
public class BrowseCommand : ICommand
{
//Code here
}
Run Code Online (Sandbox Code Playgroud)
在ViewModel中:
public class ExampleViewModel
{
public ExampleViewModel()
{
BrowseCommand = new BrowseCommand();
}
public ICommand BrowseCommand
{
get;
private set;
}
//More Code...
}
Run Code Online (Sandbox Code Playgroud)
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ExampleViewModel();
}
}
Run Code Online (Sandbox Code Playgroud)
MainWindow.xaml:
Window x:Class="Ship32RcParser.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" >
<Grid>
<Button Content="Browse" Command="{Binding BrowseCommand}"/>
<Button Content="Search" Command="{Binding I_NEED_HELP_HERE}" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
我知道我的浏览工作正常,因为MainWindow.xaml.cs有
DataContext = new ExampleViewModel(); …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的xml字符串:
我正在使用元素树库
<?xml version="1.0" encoding="UTF-8"?>
<GetCategoriesResponse xmlns="urn:ebay:apis:eBLBaseComponents"><CategoryArray><Category><WantedParm1>true</WantedParm1><UnwantedParm1>true</UnwantedParm1><WantedParm2>20081</WantedParm2></Category></CategoryArray></GetCategoriesResponse>
Run Code Online (Sandbox Code Playgroud)
我想获取“类别节点”的一些值,我们将其称为“通缉参数1和2”。但是,我收到AttributeError的原因可能是因为我编写的代码无法找到“类别”项的子节点。
AttributeError:'NoneType'对象没有属性'text'。
import xml.etree.ElementTree as ET
XML = #Above Code in String
tree = ET.ElementTree(ET.fromstring(XML))
root = tree.getroot()
for Category in root[0]:
one = Category.find("WantedParm1").text
two = Category.find("WantedParm2").text
print(one, two)
Run Code Online (Sandbox Code Playgroud)