Я бы использовал Linq Где и Содержит так:
var xmlBody = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<Visit>
<Person>...</Person>
<Name>...</Name>
<Color>...</Color>
</Visit>";
var xdoc = XDocument.Parse(xmlBody);
var nodeList = new List<string> { "Name", "LastName", "Color" };
var intersectedElements = xdoc.Elements()
.First() //<Visit>
.Elements()
.Where(element => nodeList.Contains(element.Name.LocalName));
foreach (XElement child in intersectedElements)
{
Console.WriteLine($"{child.Name.LocalName}: {child.Value}");
}
Если вы хотите, чтобы элементы могли быть вложены глубже, чем использовать Потомки.
var intersectedNestedElements = xdoc.Descendants()
.Where(element => nodeList.Contains(element.Name.LocalName));
foreach (XElement child in intersectedNestedElements)
{
Console.WriteLine($"{child.Name.LocalName}: {child.Value}");
}
Оба выхода:
Name: ...
Color: ...
Я полагаю, что Вы читали чтение-запись к Windows Registry с помощью Java, и Вы тогда хотите иметь другой бэкенд, чем реестр при использовании java.util.Preferences
API
, который Вы могли расширить Preference
API, как [1 112] Bernhard или , Croft сделал, как описано в [1 114] эта статья :
, поскольку эти предпочтения API нейтральный бэкенд, Вы не должны заботиться, хранятся ли данные в файлах, таблицах базы данных или определенном для платформы устройстве хранения данных, таких как Windows Registry.
Примеры от расширений до [1 116] новый Preferences
видны здесь .
, Который лучше, IMO, чем использовать другой API.
<час>, Например, ища классы, расширяющиеся java.util.prefs.AbstractPreferences
:
de.unika.ipd.grgen.util.MyPreferences
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;
/**
* Own implementation of the Java preferences API, that does not use
* a "OS backing store" but relies on importing and exporting the
* preferences via xml files.
* Also, If a preference is got, but was not in the tree, it is entered.
*/
public class MyPreferences extends AbstractPreferences {
private Map<String, String> prefs = new HashMap<String, String>();
private Map<String, AbstractPreferences> children = new HashMap<String, AbstractPreferences>();
public MyPreferences(MyPreferences parent, String name) {
super(parent, name);
}
/**
* @see java.util.prefs.AbstractPreferences#putSpi(java.lang.String, java.lang.String)
*/
protected void putSpi(String key, String value) {
prefs.put(key, value);
}
<час> de.tarent.ldap.prefs.LDAPSystemPreferences
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import de.tarent.ldap.LDAPException;
import de.tarent.ldap.LDAPManager;
/**
* @author kirchner
*
* Preferences im LDAP
*/
public class LDAPSystemPreferences extends AbstractPreferences {
LDAPManager ldm = null;
Properties properties = new Properties();
//Map für key/value der Preferences
Map cache = new HashMap();
//Map für timestamp der Preferences
Map timestamp = new HashMap();
private Boolean deleted = Boolean.FALSE;
<час> com.adito.boot.PropertyPreferences
:
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* A simple implementation for the preferences API. That stores preferences
* in propery files. We do not have to worry about sharing the preferencese
* with other JVM instance so there is no need for any kind of synchronising
* or locking.
*/
public class PropertyPreferences extends AbstractPreferences {
Всегда возможно расширить java.util.prefs. AbstractPreferences.
альтернатива могла быть должна использовать пакет Конфигурации из Apache, который палата общин позволяет Вам читать и писать данным конфигурации из других источников.